| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
как? |
| Автор: 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 | ||
это я знаю, я же не это спросил |