Как Windows Notepad интерпретирует символы - PullRequest
8 голосов
/ 21 июля 2011

Мне было интересно, как Windows интерпретирует символы, например:

Я создал файл с Hexeditor с 3 байтами E3 81 81.Эти байты являются символом "ぁ", закодированным как UTF-8.

Я открываю блокнот, и он отображает "ぁ"

Я не указал кодировку файла, я только что создалбайты.и блокнот правильно его интерпретирует.

Блокнот угадывает, какая кодировка, вероятно, есть?или Hex-редактор сохраняет эти байты с определенной кодировкой.

Ответы [ 5 ]

4 голосов
/ 21 июля 2011

Если файл содержит только эти три байта, тогда вообще нет информации о том, какую кодировку использовать.

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

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

Если вы сохраните файл как UTF-8, Блокнот поместит спецификацию (метка порядка байтов) EF BB BF в начало файла.

3 голосов
/ 21 июля 2011

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

2 голосов
/ 13 ноября 2013

Существует простой и эффективный способ проверить, находится ли файл в UTF-8.См. Википедия: http://en.wikipedia.org/w/index.php?title=UTF-8&oldid=581360767#Advantages, четвертая точка.Блокнот, вероятно, использует это.

Википедия утверждает, что Блокнот использовал функцию IsTextUnicode, которая проверяет, написан ли шаблонный текст в UTF-16 (он мог перестать использовать его в Windows Vista, что исправило «Буш скрылфакты "ошибка": http://en.wikipedia.org/wiki/Bush_hid_the_facts.

2 голосов
/ 21 июля 2011

... и иногда это неправильно ... https://ychittaranjan.wordpress.com/2006/06/20/buggy-notepad/

0 голосов
/ 23 декабря 2015

как определить файл в какой кодировке ....?

перейдите к файлу и попробуйте (сохранить AS), и вы по умолчанию сможете увидеть кодировку файла. (В каком формате кодировки он сохраняется)

...