Конвертація двобайтових символів в php - stack overflow російською

Підкажіть, будь ласка, як можна перевести багатобайтових символ з одного кодування в іншу тобто з utf-8 в cp1251 на php. Тобто скажімо я хочу перетворити букву "г" з utf-8 в cp1251. Наскільки я розумію, я отримую два символу [syntax = php] Р [/ syntax] і [syntax = php] и [/ syntax], тобто два байта, а як мені тепер як мені їх скласти, або перевести в десяткове подання, щоб потім зробити якесь дію, наприклад відняти 848, щоб отримати той же номер в системі cp1251

Цікавить саме спосіб, а не готові функції

заданий 6 Лютого '13 о 13:06

Символи utf-8 треба переводити в коди ucs, а їх (якщо це можливо) в cp1251. Природно не всі ucs (наприклад: latin-1, псевдографіка, ієрогліфи і т.д.) можуть бути переведені в cp1251.

Як переводити utf-8 в ucs.

Дивимося перший (знаковий) біт байта utf-8. Якщо це 0, то код ucs дорівнює значенню цього байта (це ascii).

Якщо перші два біта це 10 або значення байта 0xff або 0xfe, то це помилка в utf-8.

Тепер проаналізуємо старші біти байта. Виділимо кілька 1, а потім один 0. Кількість одиниць дорівнює кількості байт utf-8, що кодують ucs. Частина, що залишилася байта це старші біти кодованого ucs. При цьому всі наступні байти даного символу повинні починатися з 10 і залишаються в них 6 біт кодують чергову частину ucs.

Вся кирилиця кодується 2 байтами utf-8. Наприклад, російська А (ucs код 0x410) в utf-8 це 2 байта 0xd0 0x90

Інший приклад це символ №

Взагалі-то швидше написати програму (мені простіше на Сі, але Вас цікавить ПХП), ніж пояснювати російськими словами.

Для 2-х байт в str [], отримавши в b1 перші 5 біт, а в b2 останні 6

або якщо в ПХП немає бітових операцій (сподіваюся залишок від ділення є), то

Схожі статті