Pup*_*Pup 8 unicode encoding byte-order-mark utf-8
这些已经过时了吗?它们似乎是有史以来最糟糕的想法 - 在文件的内容中嵌入了一些无人能看到的内容,但会影响文件的功能.我不明白为什么我会想要一个.
jal*_*alf 17
在某些情况下,它们是必要的,是的,因为UTF-16有little-endian和big-endian实现.
读取未知的UTF-16文件时,如何判断使用哪两个?唯一的解决方案是在文件中放置某种易于识别的标记,无论使用何种字节顺序,都不会将其误认为是其他任何标记.
这就是BOM的作用.
你需要一个吗?只有当你1)使用UTF编码时才会出现字节顺序问题(对UTF-16很重要,但无论字节顺序如何,UTF8总是看起来都一样),并且该文件将与外部应用程序共享.
如果您自己的应用程序是唯一一个将要读取和写入文件的应用程序,您可以省略BOM,并简单地一劳永逸地决定您要使用哪个字节序.但是如果另一个应用程序必须读取该文件,它将不会提前知道字节序,因此添加BOM可能是个好主意.
来自Unicode Consortium 的UTF和BOM FAQ的一些摘录可能会有所帮助.
问:什么是BOM?
答:字节顺序标记(BOM)由数据流开头的字符代码U + FEFF组成,它可以用作定义字节顺序和编码形式的签名,主要是未标记的明文文件.在某些更高级别的协议下,在该协议中定义的Unicode数据流中可能必须(或禁止)使用BOM.(强调我的.)
我不确切地说字节顺序标记嵌入在数据中.相反,它为数据添加前缀.当字符是数据流中的第一个字符时,该字符只是一个字节顺序标记.在其他任何地方,它都是零宽度的不间断空间.不支持字节顺序标记的Unicode感知程序不会因为它的存在而受到真正的伤害,因为该字符是不可见的,并且文本块开头的单词连接器只是将下一个字符连接到任何东西,所以没有效果.
问:BOM在哪里有用?
答: BOM在输入为文本的文件的开头很有用,但是不知道它们是大端还是小端格式 - 它也可以作为提示指示文件是Unicode,如与遗留编码相反,此外,它充当所使用的特定编码形式的签名.
因此,当您的程序能够处理多种Unicode编码时,您需要BOM.您的程序如何知道在解释其输入时使用哪种编码?
问:使用BOM时,是否仅使用16位Unicode文本?
答:不可以,无论Unicode文本如何转换,BOM都可以用作签名:UTF-16,UTF-8,UTF-7等.构成BOM的确切字节将是Unicode字符U + FEFF由转换格式转换.在该表单中,BOM用于指示它是Unicode文件以及它所处的格式.
这可能就是今天最频繁使用BOM的情况.它将UTF-8编码的文本与任何其他编码区分开来; 它并没有真正标记字节的顺序,因为UTF-8只有一个订单.
如果您正在设计自己的协议或数据格式,则无需使用BOM.常见问题中的另一个问题涉及到:
问:如何标记不将U + FEFF解释为BOM的数据?
答:使用标签UTF-16BE表示big-endian UTF-16文本,使用UTF-16LE表示little-endian UTF-16文本.如果您使用BOM,请将文本标记为UTF-16.
它提到了标记数据格式的概念.这意味着指定格式外的带从数据本身.如果您可以使用这样的工具,那就太好了,但通常情况下并非如此,特别是在为旧系统进行Unicode改造时.
| 归档时间: |
|
| 查看次数: |
7088 次 |
| 最近记录: |