Может ли файл UTF-8 содержать символы, отличные от UTF-8? - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь импортировать файл в какое-то программное обеспечение, но он жалуется, что файл не сохранен как UTF-8.Я проверил свой редактор, gedit, и он утверждает, что он сохраняется как таковой.Я также пытался сохранить в виде файла Windows вместо Linux, но это не помогло.Итак, я разрезал файл на части, и обнаружил, что 99% файла - это хорошо, но где-то среди примерно 3 строк текста что-то расстраивает программное обеспечение.В файле много разных языков, поэтому много необычных символов.Возможно ли, что некоторые символы в документе не относятся к UTF-8?

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Может ли файл UTF-8 содержать некоторые символы, которые не являются UTF-8?

Нет, потому что тогда это не будет файл UTF-8.

Я также пытался сохранить файл в формате Windows вместо Linux, но это не помогло.

Окончания строк в Windows и Unix не имеют отношения к UTF-8.

В файле много разных языков, поэтому много необычных символов.Возможно ли, что некоторые символы в документе не относятся к UTF-8?

Нет.Все символы (кодовые точки Unicode) представляются в UTF-8.Однако возможно, что некоторые байты в файле не являются допустимыми в кодировке UTF-8.

Маловероятно, что Gedit выдаст недопустимый UTF-8, если он заявит об этом, поэтому есть несколько возможностей:1019 *

  1. Используется маркер Unicode, который не может прочитать программа импорта.
  2. Маркер Unicode не используется, и важное программное обеспечение ожидает его.
  3. импортирующее программное обеспечение неправильно анализирует UTF-8.
  4. импортирующее программное обеспечение не распознает все кодовые точки.Подробнее об этом см. ответ Родриго .
2 голосов
/ 10 января 2012

Символ «A», который вы упоминаете в комментарии:

U + FF21 ПОЛНОЦЕННЫЙ ЛАТИНСКИЙ КАПИТАЛЬНЫЙ ПИСЬМО A

И в UTF-8 кодируется как:

0xEF 0xBC 0xA1

Вы можете проверить, являются ли эти байты в файле (скорее всего).

Если это так, то это ошибка в вашем программном обеспечении.Возможно, он пытается автоматически обнаружить кодировку или тип файла, просматривая первые байты файла, и он каким-то образом путается.

Может быть, он видит первый байт (0xEF) и невольно ожидает спецификации (Порядок следования байтов), который является UTF-8: 0xEF 0xBB 0xBF.Но его там нет, поэтому выдает ошибку.

1 голос
/ 10 января 2012

Некоторые программы неправильно обрабатывают некоторые особенности UTF-8.

Например, некоторые программы не могут правильно читать / записывать суррогатные пары как одну кодовую точку UTF-8, и вместо этого записывают / ожидают две отдельные кодовые точки UTF-8 для каждой пары.

Некоторые программы не могут обрабатывать кодовые точки вне BMP, который вообще является первыми 64K-символами.

Вам следует проверить, есть ли в вашем файле какие-либо из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...