Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как оличить utf-8 от ascii


Автор: GQU 4.11.2015, 09:21
Как с помощью кода отличить ANSI от utf-8?

Автор: Alexeis 4.11.2015, 11:04
Только по статистическим расчетам при наличии длинного текста. По хорошему везде должно указываться какая кодировка. Например такой текст "dfhdfherheh" идентичен в ANSI и UTF8. 

Автор: volatile 4.11.2015, 11:53
В utf-8 многоа запрещенных комбинаций, можно по ним определить, что это не utf-8.

Если в utf-8 только русский (ну и английский), то определить достаточно просто, если текст хотябы больше 3 букв.
я когда-то писал програмку для коррекции неправильной кодировки для IRC-бота. (он никогда не ошибался).

Правда искусственно можно подобрать комбинации являющиеся валидными в той и другой кодировке
например:
РёРё == ии

Автор: leniviy 5.11.2015, 11:09
Прикрутить enca http://cihar.com/software/enca/

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-olichit-utf-8-ot-ascii-id5639a484ae20152c5b8b4567#findElement_E7045_563b0ea5ae20159276f4ed58_0

Автор: Andrey Bushman 5.11.2015, 11:51
В WinAPI для этого существует функция https://msdn.microsoft.com/en-us/library/windows/desktop/dd318672%28v=vs.85%29.aspx. Она анализирует текст по различным алгоритмам. Чем больше фрагмент анализируемого текста и чем больше вариантов проверки требует программист - тем больше шансов получить корректный результат. Однако сто процентного способа, гарантированно определяющего кодировку (ANSI или Unicode) не существует.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-olichit-utf-8-ot-ascii-id5639a484ae20152c5b8b4567#findElement_E7045_563b18a2ae20150e37f4d588_0

Автор: GQU 11.11.2015, 11:25
Цитата

Если в utf-8 только русский (ну и английский), то определить достаточно просто, если текст хотябы больше 3 букв.

как?

Автор: math64 11.11.2015, 11:59
В utf8 есть символы, кодируемые 1 , 2 и 3 байтами
С 1 байт - коды в диапазоны 0-127
Есть коды, начинающие символ, кодируемый 2 байтами, и есть коды, начинающие символ, кодируемый 3 байтами.
Есть коды для второго и третьего байта.
Если код для первого байта встречается без кода второго байта (или без третьего, для трехбайтовой последовательности) или код для второго байта без первого - это не utf8.

Автор: GQU 14.11.2015, 23:54
Написал в notepad++
чудеса
в кодировке win1251
почему ставлю кодировать в ut8 без bom и нормально читает, почему нет крякозябликов?

Автор: math64 16.11.2015, 10:50
Если сохраняешь с bom в начало файла дописываются 3 байта, читаемые как один символ Unicode FEFF
идентифицирующий что файл в utf8. Его нужно пропускать. 

Автор: GQU 16.11.2015, 15:31
Цитата

Если сохраняешь с bom в начало файла дописываются 3 байта, читаемые как один символ Unicode FEFF
идентифицирующий что файл в utf8. Его нужно пропускать.  

это я знаю, я же не это спросил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)