1
7
将文件另存为UTF-16时,每个值为两个字节。不同的计算机使用不同的字节顺序。有的把最高有效字节放在第一位,有的把最低有效字节放在第一位。Unicode保留了一个称为字节顺序标记(byte order mark,BOM)的特殊码点(U+FEFF)。当一个程序用UTF-16写一个文件时,它把这个特殊的代码点放在文件的开头。当另一个程序读取UTF-16文件时,它知道那里应该有一个BOM。通过将实际字节与预期的BOM进行比较,它可以判断读取器是否使用与写入器相同的字节顺序,或者是否必须交换所有字节。
赞成这样做的理由是,它将文件标记为真正的UTF-8,而不是其他一些本机编码。例如,西部窗口上的许多文本文件都在代码页1252中。用UTF-8编码的BOM标记文件,可以更容易地区分不同之处。 反对这样做的理由是,很多程序都期望ASCII或UTF-8,而不知道如何处理额外的三个字节。
更新:
您可以转换
|
2
1
只是澄清一下,你应该意识到 不 |
3
1
你不能。你必须知道你的文件是用什么编码写的。而Unicode编码的文件 可以 从物料清单开始,我认为没有要求他们这么做。 |
4
1
关于第二点,每个有效的ASCII字符串也是一个有效的UTF-8字符串,因此不必显式地检查ASCII。只需使用UTF-8读取文件,如果文件不包含有效的UTF-8字符串,则会出现错误。 |
5
0
我猜你是想问,为什么它有这些字符。这些角色可能是 byte order mark 至于知道一个文件的编码是什么,你不能从文件本身派生出来。您必须提前知道它(或者询问向您提供文件的用户)。为了更好地理解编码而不必大量阅读,我强烈推荐joelspolsky的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |