Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

utf-8 encoded, how to decode?

94K
02 сентября 2014 года
filan coo
1 / / 02.09.2014
Здравствуйте форумчане.
Пытаюсь прочитать строку utf-8 из нескольких jpg файлов (iptc заголовки), не получается, потому что как мне кажется она закодированна, не вооруженным глазом в hex editor'е видно постоянно повторяющую последовательность D0A0

Замечу сразу что остальные считываю нормально, то есть с функцией у меня все ок.
Приблизительно понимаю что там идет сдвиг на сколько-то битов логическое И и ИЛИ и получается из 2 байт 4 байтовая последовательность.
Вот пример:
D0A0 D290 => Х
D0A0 D195 => o
D0A0 C288 => л
D0A0 D198 => м

помогите пожалуйста кто в теме

p.s: то что это "Холм" я точно знаю
4
03 сентября 2014 года
mike
3.7K / / 01.10.2002
Может воспользоваться стандартными функциями для работы с UTF-8? Символы в UTF-8 могут иметь разную длину. Так символы стандартного латинского алфавита однобайтные (с кодом до 127), символы кириллицы двухбайтные,

Если размер символа в кодировке UTF-8 = 1 байт, код имеет вид (0aaa aaaa), где «0» — просто ноль, остальные биты «a» — это код символа в кодировке ASCII;

Если размер символа в кодировке в UTF-8 > 1 байт (то есть от 2 до 6), то первый байт содержит количество байтов символа, закодированное в единичной системе счисления:

 
Код:
2 — 11
3 — 111
4 — 1111
5 — 1111 1
6 — 1111 11
«0» — бит терминатор, означающий завершение кода размера

Далее идут значащие байты кода, которые имеют вид (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
В общем, разбирать самому UTF-8 занятие странное и ненужное. Особенно с учетом того что правильно сконвертировать всю таблицу вы не сможете. Если нет возможности использовать системные функции (зависит от ОС), то можно использовать библиотеку iconv. Есть порты под любую ОС.
277
07 сентября 2014 года
arrjj
1.7K / / 26.01.2011
бгг там всё проще это "Холм" в utf, но прочитанный как win1251 - "РҐРѕРˆРј" т.е. исходную строку закодировали в utf-8, получившийся набор байт прочитали как win1251 и еще раз закодировали в utf8
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог