Destiny
|
Posted: Fri Mar 22, 2024 11:02 Post subject: |
|
|
little-brother wrote: | Там не какая то фиксированная последовательность. utf8 кодирует один символ в 1-4 байта. Английские - это всегда 1 байт и в принципе совпадает с ANSI, а вот русские буквы - это уже по два байта. |
Ну я же не про это написал свои мысли! Пример ошибочного символа вас разве не навел на мысль, что такими "неверными"
символами надо сразу изначально рассматривать такой диапазон знаков, который в принципе не может существовать в текстовом файле?
Вроде как вот такой набор символов должен быть нормальным:
Основные многоязычные плоскости (Basic Multilingual Plane):
От 0x0020 до 0x007E (включительно) - символы ASCII и их расширения.
От 0x00A0 до 0x00FF - дополнительные символы, такие как латинские расширения.
От 0x0100 до 0x017F - латинские расширения А и В.
От 0x0180 до 0x024F - различные расширения, включая латиницу, кириллицу, греческий алфавит и другие.
Символы за пределами основной многоязычной плоскости:
От 0x0370 до 0x03FF - дополнительные греческие символы.
От 0x0400 до 0x04FF - кириллические символы.
От 0x0500 до 0x052F - дополнительные кириллические символы.
От 0x1E00 до 0x1EFF - дополнительные символы для различных алфавитов.
Символы для математических и технических вычислений:
От 0x2200 до 0x22FF - математические операторы.
От 0x2300 до 0x23FF - технические символы и различные стрелки.
Специальные символы и эмодзи:
От 0x1F300 и выше:
Эмодзи (символы смайликов и иконки):
От 0x1F300 до 0x1F6FF.
Графические символы (включая флаги, карты, знаки зодиака):
От 0x1F700 до 0x1F77F.
Дополнительные символы и пиктограммы:
От 0x1F780 до 0x1F7FF.
Символы и пиктограммы для музыки:
От 0x1F800 до 0x1F8FF.
Символы и пиктограммы для иероглифов и других символов:
От 0x1F900 до 0x1F9FF.
Дополнительные специальные символы:
От 0x1FA00 и выше.
А вот наш "обламывающий всё" символ имеет код 0x001A (U+0000 до U+001F) - а значит он НЕ входит в диапазон понятных
человеку/бумаге символов. И вот такие явно понятные bad-символы искать и исключать, но и сообщать пользователь об этом.
И такой код он сохранил после перекодировки. Т.е. мы выполняем общую перекодировку в UTF-8. Если нет ошибок - шикарно.
Если есть - то для каких символов? Если полученный код символа не входит в разрешённый, то нафиг его и дать знать юзеру.
Еще раз - тот же xmlreview вполне лего и трезво указал на этот символ после перекодировки в UTF-8 всего файла.
Code: | Reason: The character "0x001A" cannot occur in text. |
|
|