标签: byte-order-mark

为什么我要使用Unicode签名字节顺序标记(BOM)?

这些已经过时了吗?它们似乎是有史以来最糟糕的想法 - 在文件的内容中嵌入了一些无人能看到的内容,但会影响文件的功能.我不明白为什么我会想要一个.

unicode encoding byte-order-mark utf-8

8
推荐指数
3
解决办法
7088
查看次数

UTF-16LE与UTF32-LE的Unicode BOM

看起来用于UTF16-LE和UTF-32LE的字节顺序标记之间存在歧义.特别是,考虑一个包含以下8个字节的文件:

FF FE 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

如何判断此文件是否包含:

  1. UTF16-LE BOM(FF FE)后跟3个空字符; 要么
  2. UTF32-LE BOM(FF FE 00 00)后跟一个空字符?

Unicode BOMs在这里描述:http://unicode.org/faq/utf_bom.html#bom4但是没有讨论这种歧义.我错过了什么吗?

unicode byte-order-mark file-type utf-16 character-encoding

8
推荐指数
2
解决办法
2303
查看次数

HTML验证错误:在DOCTYPE之前找到非空格字符

我有一个博客(基于wordpress).并尝试通过w3c验证器验证我的一个页面.第一个错误是:

Line 1, Column 1: Non-space characters found without seeing a doctype first. Expected <!DOCTYPE html>.
<!DOCTYPE html><!-- HTML 5 -->
Run Code Online (Sandbox Code Playgroud)

此外,DebugBar(http://www.my-debugbar.com/wiki/IETester/HomePage)同意并<!在我从此工具中的"HTML Check"选项卡打开同一页面之前显示两个不可见的字符.但!!

  1. 这行HTML代码来自我的wordpress主题中的文件header.php.
  2. 我将此文件从我的主机下载到本地硬盘.
  3. header.php的第一行是<!DOCTYPE html><!-- HTML 5 -->
  4. 当我在RJ TextEd(只是高级文本编辑器)中打开header.php时,它说:header.php的当前编码是没有(!)BOM的UFT-8 .
  5. 当我在HEX-viewer中打开header.php时,我看到,字节0和1是3c,21 - 所以它是完全正确的<!.

所以,考虑到所有事情,为什么以及从哪里获得这些"奇怪的符号"?

html wordpress byte-order-mark utf-8 w3c-validation

8
推荐指数
1
解决办法
1万
查看次数

为什么R读UTF-8标题为文本?

我将Excel表保存为文本(*.txt).不幸的是,Excel不允许我选择编码.所以我需要在记事本(打开为ANSI)中打开它并将其保存为UTF-8.然后,当我在R中读到它时:

data <- read.csv("my_file.txt",header=TRUE,sep="\t",encoding="UTF-8")
Run Code Online (Sandbox Code Playgroud)

它显示以"XUFEFF."开头的第一列的名称.我知道这些是保留的字节,告诉任何程序该文件是UTF-8格式.所以它不应该显示为文本!这是一个错误吗?或者我错过了一些选择?提前致谢!

csv byte-order-mark r utf-8 file-encodings

8
推荐指数
1
解决办法
4559
查看次数

在Go中读取带有BOM的文件

我需要读取可能包含或不包含字节顺序标记的Unicode文件.我当然可以自己检查文件的前几个字节,如果找到则丢弃BOM.但在此之前,有没有任何标准的方法可以做到这一点,无论是在核心库还是第三方?

unicode byte-order-mark go

8
推荐指数
2
解决办法
2572
查看次数

从Java中的字符串中删除BOM

我有文件中的字符串,其中包含BOM(来自UTF-8).我想将此字符串转换为win-1251并将其放入文件中.

我试图以这种方式从字符串中删除BOM:

out.write(l.replace('\uFEFF','\0') + "\n");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.为什么?

在win-1251文件中输出此字符串:

?1,...SOME_TEXT_HERE
Run Code Online (Sandbox Code Playgroud)

第一个"?" 标志是非法的.

java encoding byte-order-mark utf-8

8
推荐指数
1
解决办法
1万
查看次数

在浏览器下载中保留 UTF-8 BOM

我有一个 JAX-RS REST-Service,它生成一个 CSV 文件并将其流回浏览器。一切都设置为 UTF-8,所以我通过浏览器下载的文件也是一个有效的 UTF-8 文件(没有 BOM),它在 Notepad++、Sublime 等中向我显示有效、可读的 UTF-8 变音等。

虽然在 Excel 中打开这样的文件会导致不可读的变音等,因为 Excel 显然试图用另一个字符集打开它(CP-1252,我猜,但这并不重要)。

通过 Notepad++ 使用 BOM 保存文件并在 Excel 中重新打开它效果很好。似乎 BOM 的检测是 Excel 用来检测 UTF-8 的唯一方法。无论如何 - 我认为添加 BOM 可以帮助......

做过某事。结果一样。过了一会儿,我发现在某些情况下 BOM 会被删除:如果我在 BOM 之前添加任何字符,我可以在我的十六进制编辑器中看到 BOM。删除该字符后,BOM 将不再存在。

当我继续通过 cURL 下载文件时,我真的很惊讶。BOM 就在那里!在那之前,我认为这可能与我的应用程序、内容类型、编码、HTTP 标头等有关 - 但它们似乎都很好。

现在,经过数小时的尝试不同的东西,关于如何告诉浏览器保留 BOM 的任何想法?我可以设置任何 HTTP 标头吗?由于 Chrome、Internet Explorer、Edge、Firefox 都删除了 BOM,这对我来说听起来有点像浏览器约定......

非常感谢您的大力帮助!

编辑:感谢 sideshowbarker 的回答,我找到了一种解决方法,即在内容之前添加两个 BOM,因此在浏览器删除第一个 BOM 后,将剩余一个 BOM。

browser curl byte-order-mark jax-rs utf-8

8
推荐指数
1
解决办法
1685
查看次数

是否可以在使用BOM编码为UTF-8的文件上运行SQLPLUS脚本

我正在尝试运行已从大量源自动生成的脚本集合.不幸的是,其中一些已生成为带有BOM的UTF-8.我已经建立了一个自动删除BOM的系统,但它有点混乱.

未能删除BOM会生成错误:

SP2-0042: unknown command "" - rest of line ignored.
Run Code Online (Sandbox Code Playgroud)

是否可以在具有BOM的脚本文件上运行SQLPLUS?

oracle plsql byte-order-mark utf-8

7
推荐指数
2
解决办法
5363
查看次数

是否htonl()改变了BIG ENDIAN机器上的字节顺序?

字面上混淆了htonl().在这么多链接中,我发现执行htonl的代码是:

#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
                  ((((unsigned long)(n) & 0xFF00)) << 8) | \
                  ((((unsigned long)(n) & 0xFF0000)) >> 8) | \
                  ((((unsigned long)(n) & 0xFF000000)) >> 24))
Run Code Online (Sandbox Code Playgroud)

如果在两台机器上运行相同的代码,它将交换字节顺序.示例:uint32_t a = 0x1;

在Little Endian:

地址值

100   1
101   0
102   0
103   0
Run Code Online (Sandbox Code Playgroud)

在htonl之后(a)

地址值

100   0
101   0
102   0
103   1
Run Code Online (Sandbox Code Playgroud)

============================================ 在Big Endian机器上:

地址值

100   0
101   0
102   0
103   1
Run Code Online (Sandbox Code Playgroud)

在htonl之后(a)

地址值

100   1
101   0
102   0
103   0 …
Run Code Online (Sandbox Code Playgroud)

c byte-order-mark endianness

7
推荐指数
2
解决办法
4805
查看次数

从签名的PDF文件中删除字节订单标记?

我使用iTextSharp 5.5.1以数字方式使用分离签名(从第三方机构获得)签署PDF文件.一切似乎都运行正常,文件有效,例如Adobe Reader报告没有问题,将签名显示为有效等.

问题是Java客户端显然存在这些文件的一些问题 - 文件既不能打开也不能解析.
这些文件在标题中有一个字节顺序标记,这似乎会导致该行为(\ x00EF\x00BB\x00BF).

我可以像这样识别BOM:

PdfReader reader = new PdfReader(path);
byte[] metadata = reader.Metadata;
// metadata[0], metadata[1], metadata[2] contain the BOM
Run Code Online (Sandbox Code Playgroud)

我如何可以删除的BOM(不失签名的有效性),或强制iTextSharp的图书馆不将这些字节附加到文件?

c# pdf byte-order-mark itextsharp digital-signature

7
推荐指数
1
解决办法
944
查看次数