在记事本中将ANSI转换为UTF-8


25

我有一个用ANSI编码的文本:

ANSI文本文件

当我尝试将其转换为UTF-8时(使用Notepad ++菜单Encoding> UTF-8),我得到了一些奇怪的字符:

UTF-8文字档

我以为UTF-8是ANSI的超集,因此我以后不会遇到此类问题。无论如何,我能避免那些奇怪角色的出现吗?


我看不到后
一张

我的意思是不可显示的字符。有什么办法可以避免这种情况?
user3658425 2014年

您编辑问题了吗?我想我看到图像颠倒了
phuclv 2014年

1
是的,很抱歉,我在有人添加图像之后立即上次编辑,从而删除了添加的内容:如果您可以将它们添加回去,那就太好了!
user3658425 2014年

4
我从该主题中学到的一切,都是从Joel的“ 每个软件开发人员绝对绝对要完全了解Unicode和字符集(没有任何借口!) ” 中学到的
Uwe Keim

Answers:


38

UTF-8 不是字符集,只是Unicode的编码。前128个字符与ASCII相同,但高128个字节不同。设置了高位(或> = 0x80)的字节是ASCII中的扩展字符,而在UTF-8中,它表示多字节序列的起始字节。上面的0x93或0x94就是这种情况。但是,我在文件中看不到任何奇怪的东西。这些是智能引号或具有不同形式的引号和closin引号,在使用诸如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也是Unicode的前256个代码点,因此它是Unicode的子集,但与UTF-8编码不兼容。ASCII是7位字符集,是ANSI的一个子集,由8位编码,但有时也称为ANSI,尽管不是很正确

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

通常,字符集之间的关系如下

ASCII < ISO 8859-1 < Windows-1252
        ^
        Unicode

谢谢,很抱歉弄乱了编码的字符集。有什么办法可以避免使用那些不可显示的字符,而使用一些可显示的引号呢?
user3658425 2014年

@ user3658425,请参阅我的编辑
phuclv 2014年

1
我还编辑了上面的ANSI / ASCII信息
phuclv 2014年

3
请注意,通常,您想要的是“不带字节顺序标记的UTF-8”。正如其他几个人过去所说的那样,“ UTF-8是唯一有用的字符串编码。”
2014年

4
@WillihamTotland utf8everywhere.org
phuclv 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.