2015-08-05 3 views
1

Я сохранил файл в блокноте, и я получил предупреждающее сообщение о том, что файл содержит unicode, который не сохранил бы корректно как ansi. Я не видел никаких символов, которые были бы проблемой, поэтому я открыл файл в консоли и нашел эти случайные символы в тексте. Они вообще не видны в блокноте. Даже пространство, которое они занимают в консоли, отсутствует в блокноте. Ниже я опубликовал снимок экрана в блокноте и в консоли. Что происходит?unicode не отображается в блокноте, но отображается в консоли

блокнота

notepad

консоли

console

ответ

2

Символы отображается на консоли являются кодировка UTF-8, для Zero Width Space, которая не была бы видна в блокноте или любом другое приложение Unicode. Консоль обычно не работает с Unicode, она использует кодовую страницу (обычно code page 437), чтобы определить, какой символ отображать на основе выводимых байтов. Кодировка UTF-8 пространства Zero Width занимает 3 байта \xe2\x80\x8b, поэтому вы видите 3 символа на консоли, удвоившись, потому что у вас есть два Zero Width Spaces.

+0

Очень полезно, спасибо большое. Мне нужно сесть и действительно познакомиться с различными типами кодирования. Есть ли относительно простой способ увидеть байты UTF-8 в редактируемом формате, чтобы я мог их редактировать? Они разрушают мою программу. – jana

+0

@jana, вы можете легко написать программу, чтобы удалить их. Просто отбросьте любой байт, который не имеет значения от 0 до 127. –

+0

@jana: Я использую [WinVi] (http://www.winvi.de/en/), который является текстовым редактором, в шестнадцатеричном редакторе и поддерживает кодировки UTF-8 и UTF-16. Таким образом, вы можете загрузить в него файл UTF-8, переключиться на шестнадцатеричное представление, удалить оскорбительные байты и затем снова сохранить файл как UTF-8. Вы даже можете переключить текстовое представление на Ansi, чтобы байт UTF-8 выглядел визуально, как это делает консольное окно. –

Смежные вопросы