2 — 11
3 — 111
4 — 1111
5 — 1111 1
6 — 1111 11
utf-8 encoded, how to decode?
Пытаюсь прочитать строку utf-8 из нескольких jpg файлов (iptc заголовки), не получается, потому что как мне кажется она закодированна, не вооруженным глазом в hex editor'е видно постоянно повторяющую последовательность D0A0
Замечу сразу что остальные считываю нормально, то есть с функцией у меня все ок.
Приблизительно понимаю что там идет сдвиг на сколько-то битов логическое И и ИЛИ и получается из 2 байт 4 байтовая последовательность.
Вот пример:
D0A0 D290 => Х
D0A0 D195 => o
D0A0 C288 => л
D0A0 D198 => м
помогите пожалуйста кто в теме
p.s: то что это "Холм" я точно знаю
Если размер символа в кодировке UTF-8 = 1 байт, код имеет вид (0aaa aaaa), где «0» — просто ноль, остальные биты «a» — это код символа в кодировке ASCII;
Если размер символа в кодировке в UTF-8 > 1 байт (то есть от 2 до 6), то первый байт содержит количество байтов символа, закодированное в единичной системе счисления:
Код:
Далее идут значащие байты кода, которые имеют вид (10xx xxxx), где «10» — биты признака продолжения, а x — значащие биты.
В общем случае варианты представления одного символа в кодировке UTF-8 выглядят так:
Код:
(1 байт) 0aaa aaaa
(2 байта) 110x xxxx 10xx xxxx
(3 байта) 1110 xxxx 10xx xxxx 10xx xxxx
(4 байта) 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
(5 байт) 1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
(6 байт) 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
(2 байта) 110x xxxx 10xx xxxx
(3 байта) 1110 xxxx 10xx xxxx 10xx xxxx
(4 байта) 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
(5 байт) 1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
(6 байт) 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
бгг там всё проще это "Холм" в utf, но прочитанный как win1251 - "РҐРѕРРј" т.е. исходную строку закодировали в utf-8, получившийся набор байт прочитали как win1251 и еще раз закодировали в utf8