如何避免将UTF-8文件意外编码为ASCII/ANSI?

如何避免将UTF-8文件意外编码为ASCII/ANSI?,utf-8,notepad++,byte-order-mark,Utf 8,Notepad++,Byte Order Mark,在编辑编码为UTF-8 w/o[伪]BOM的文件的过程中,内容可能会在ASCII或ANSI范围之外缺少任何Unicode字符。在下次重新打开该文件时,一些文本编辑器(记事本++)会将其解释为ASCII/ANSI编码,并将其打开。不知道用户将继续编辑的更改,现在添加非ANSI Unicode字符,由于保存在ANSI中,因此呈现为无用字符。可以存在一个菜单选项(记事本++)以UTF-8 w/o BOM的形式打开ANSI文件,但会导致无意中用Unicode编码覆盖ANSI文件的相反问题。一个解决方法是

在编辑编码为UTF-8 w/o[伪]BOM的文件的过程中,内容可能会在ASCII或ANSI范围之外缺少任何Unicode字符。在下次重新打开该文件时,一些文本编辑器(记事本++)会将其解释为ASCII/ANSI编码,并将其打开。不知道用户将继续编辑的更改,现在添加非ANSI Unicode字符,由于保存在ANSI中,因此呈现为无用字符。可以存在一个菜单选项(记事本++)以UTF-8 w/o BOM的形式打开ANSI文件,但会导致无意中用Unicode编码覆盖ANSI文件的相反问题。

一个解决方法是在文件中的注释中添加ANSI范围之外的字符。根据解码算法的不同,它可能会迫使编辑器(记事本++)将文件识别为UTF-8 w/o BOM中的编码文件

例如,在HTML文档中,您可以使用这样的Unicode注释遵循标题中的字符集定义,这里是U+05D0希伯来语字母ALEF:

当文件看起来相同时,您建议编辑器如何区分ASCII/ANSI和UTF-8 w/o BOM之间的差异


如果希望保证UTF-8识别为UTF-8,请添加BOM表,或强制文件包含UTF-8字符。

将编辑器配置为始终使用UTF-8(如果可能),如果不使用,请向编辑器的创建者投诉。依我看,不以unicode为目标的字符集已被弃用,应按此处理


仅在ASCII空间(7位)中使用字符的文件在UTF-8中基本相同,因此,如果必须使用ASCII编码,请不要键入任何unicode字符。

为什么说BOM是“伪的”?对于UTF-8,编码方案仅由UTF-8代码单位(=字节)组成因此,UTF-8中表示的数据不存在大小端字节顺序的问题。但是,对于16位和32位编码形式,字节序列化必须将代码单元分别分解为两个或四个字节,并且必须明确定义这些字节的顺序。”(Unicode Book,第36页)将BOM添加到UTF-8中(UTF-8中的MS Notepad)是一种允许区分UTF-8内容的黑客攻击。因为它区分UTF-8,所以可能是真实和有用的(不是伪造的)。是的,直到它成为一个问题。在我的例子中,有一些web应用程序在删除BOM之前无法工作。请参阅中使用部分第三段中的各种其他问题。术语方面,使用BOM字节序列来标识UTF-8,最好表示为“签名”或“前言”正如Johann Gerell在.Hi Anon.中提到的那样!对不起,我没有足够快地上传我自己问题的答复,以便您及时查看。解决方案就是您建议的。许多文本编辑器(例如记事本++)擅长检测文件中与ASCII UTF8不兼容的符号,基于此,假设文件是UTF8。有一些明智的方法可以做到这一点,尽管总是有可能错误检测UTF8的某些外来代码页。感谢您的回答。我在本期中发现的有趣之处在于,文件可以更改其物理状态(编码)如果它携带的信息(文本)被修改(在一次编辑非ASCII Unicode范围内的单词时使用,在另一次编辑过程中仅使用ASCII字符制成的单词)。这有点像一支钢笔,会根据你写的单词突然改变颜色。