ANSI в UTF-8 в Notepad ++

25

У меня есть текст, закодированный в ANSI:

Текстовый файл ANSI

Когда я попытался преобразовать его в UTF-8 (используя меню Кодировка> UTF-8 в Блокноте ++), я получил несколько странных символов:

UTF-8 текстовый файл

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

user3658425
источник
Я не вижу, что странно в последнем изображении
phuclv
Я имел в виду не отображаемые символы. Есть ли способ избежать этого?
user3658425
Вы редактировали вопрос? Я думаю, что я вижу изображения в обратном порядке
phuclv
1
Да, извините, я отправил свое последнее редактирование сразу после того, как кто-то добавил изображения, тем самым удалив дополнение: если вы можете добавить их обратно, это было бы здорово!
user3658425

Ответы:

38

UTF-8 - это не кодировка, а кодировка Unicode. Первые 128 символов совпадают с ASCII, но отличаются старшими 128 байтами. Байт с установленным старшим битом (или> = 0x80) является расширенным символом в ASCII, тогда как в UTF-8 он указывает начальный байт многобайтовой последовательности. Это случай 0x93 или 0x94 выше. Тем не менее, я не вижу ничего странного в этом файле. Это умные цитаты или цитаты с разными формами для открытия и закрытия цитат, которые вы часто видите при использовании текстового редактора, такого как MS Word

редактировать

Вопрос отредактировал. Я думаю, это потому, что вы выбрали не тот инструмент. В encodeпунктах меню для изменения кодировки , если у вас есть неправильные проявления характера. Он просто обрабатывает ту же последовательность байтов, считанную с диска, что и другая кодировка. Поскольку ASCII и UTF-8 отличаются, у вас будет некорректная последовательность байтов UTF-8, и вы увидите результат выше. Вы должны выбрать convert to UTF-8для него, чтобы изменить все входные байты

кодировка блокнота

Вы также перепутали ANSI и ASCII. ANSI часто ссылается на Windows-1252, который является набором символов, используемым в английском Windows и некоторых языках Западной Европы. Это расширенный набор ISO 8859-1, хотя ISO 8859-1 также можно назвать ANSI. ISO 8859-1 - это также первые 256 кодовых точек Unicode, так что это подмножество Unicode, но оно не совместимо с кодировкой UTF-8. ASCII является 7-битным набором символов и является подмножеством ANSI, которое кодируется 8 битами, но иногда его также называют ANSI, хотя и не очень правильно

https://en.wikipedia.org/wiki/ANSI_character_set

В общем, отношения между наборами символов следующие

ASCII < ISO 8859-1 < Windows-1252
        ^
        Unicode
phuclv
источник
Спасибо, извините, что испортил кодировку с кодировкой. Есть ли способ избежать появления этих не отображаемых символов и иметь вместо них отображаемые кавычки?
user3658425
@ user3658425, пожалуйста, смотрите мои изменения
phuclv
1
Я также отредактировал информацию ANSI / ASCII выше
phuclv
3
Обратите внимание, что, как правило, «UTF-8 без метки порядка байтов» - это то, что вам нужно. Как уже говорили несколько других в прошлом, «UTF-8 - единственное полезное кодирование строк».
Riking
4
@WillihamTotland utf8everywhere.org
phuclv