“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”字符在文件开头或文件末尾的位置是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php无bom和有bom的文件编码有啥区别

Delphi中判断一个字符的位置在字符串开头或者末尾

python txt去掉bom头怎么去

安卓按键:读取txt开头出现未知字符的问题

使用 fputcsv 将 BOM 添加到 CSV 文件

写操作费用[Go lang]