“BOM”字符在文件开头或文件末尾的位置是啥? [复制]
Posted
技术标签:
【中文标题】“BOM”字符在文件开头或文件末尾的位置是啥? [复制]【英文标题】:What is the location of 'BOM' character at beginning of file or at end of file? [duplicate]“BOM”字符在文件开头或文件末尾的位置是什么? [复制] 【发布时间】:2014-07-25 02:55:33 【问题描述】:我想知道“BOM”字符在文件中的位置以及如何查看该字符。如果有人解释什么是 BOM 字符,将会很有帮助。 我想做的是我有 ANSI 文件,我想把它转换成 UTF-8 编码\ 我该怎么做?
提前致谢
【问题讨论】:
一个简单的 Google 搜索可能会将您定向到:en.wikipedia.org/wiki/Byte_order_mark 【参考方案1】:"我想知道'BOM'字符在文件中的位置
BOM 位于文件的开头。
你为什么不去谷歌或在***中查找它。
"如何查看此角色
通常你不能,但在某些情况下它会显示出来。
"如果有人解释什么是 BOM 字符会很有帮助
BOM 最初是一个字节顺序标记,用于方便地确定 UTF-16 或 UTF-32 编码文本的字节顺序。在 Windows 中,它也用于识别 UTF-8 编码文件,特别是如果没有 BOM,Visual C++ 编译器会错误识别编码。不幸的是,关于 BOM 的***文章倾向于 Unix 领域的粉丝男孩的观点,即 UTF-8 文件应该与 Windows 中的常见要求不兼容1(这有助于考虑微软是创始成员Unicode 联盟,因此 Unicode 标准中没有任何内容与 Windows 中的约定相反)。
"我想做的是我有ANSI文件,我想把它转换成UTF-8编码\我该怎么做
要准确转换,您需要知道文件使用的确切编码。请注意,“windows ansi”是一组可能的编码,其中给定 Windows 安装上的 windows ansi 是GetACP
API 函数报告的代码页。考虑到编码知识,您可以使用 Windows API 的 MultiByteToWideChar
、C 库的 mbcstowcs
或 C++11 C++ 库的 codecvt
。
1) 旧的 g++ 编译器在 UTF-8 源代码中被 BOM 阻塞,这与需要 BOM 的 Visual c++ 相反。愉快的现代版本的 g++ 接受 BOM。正如标准所要求的那样。
【讨论】:
谢谢它非常有帮助,我也想知道为什么 UTF-8,16,32 通过在 ANSI 文件开头附加 BOM 字符可以吗? @Dipak,ANSI 文本是某些特定代码页中的文本。代码页不存在 BOM,仅适用于 UNICODE 编码:UTF-8、UTF-16、UTF-32。 ANSI 文件不能有 BOM,因此您必须通过其他方式知道确切的代码页。 BOM 是 UTF 编码的一个特性。 Windows ANSI 编码不支持 BOM。我会使用MultiByteToWideChar
API 函数,因为它允许您检测所需的缓冲区大小。以上是关于“BOM”字符在文件开头或文件末尾的位置是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章