Как проверить, закодирован ли текстовый файл в UTF-8? - PullRequest
4 голосов
/ 28 декабря 2011

Как проверить, закодирован ли текстовый файл в UTF-8 на C ++?

Ответы [ 3 ]

4 голосов
/ 28 декабря 2011

Попробуйте прочитать его как UTF-8 и посмотрите, не нарушена ли кодировка UTF-8 или нет, и если нет, если есть только действительные точки Unicode.

Но все же нет никакой гарантии, что файл находится в UTF-8 или ASCII или что-то еще. Как бы вы интерпретировали файл, содержащий один байт, букву A? ASCII? UTF-8? Другой? Аналогично, что, если файл начинается с BOM по счастливой случайности, но на самом деле не является UTF-8 или не предназначен для UTF-8?

Эта статья может представлять интерес.

4 голосов
/ 28 декабря 2011

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

Обратите внимание, что по соображениям безопасности крайне важно полностью прервать преобразование при первой ошибке, а не пытаться каким-либо образом «восстановить».

0 голосов
/ 28 декабря 2011

Попробуйте конвертировать в UTF-16.Если вы не получили ошибок, то, скорее всего, это UTF-8.Но независимо от того, что вы делаете, это все еще лучшая догадка.

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