0

我正在用混合的 ascii 和 unicode 字符解析二进制数据。这是一个例子:

A..|B..|C..

其中 2 个点代表 unicode 字符的两个字节。

我的问题是.. 使用字段分隔符 (|) (0x7c) 解析这些数据是否安全。还是有可能 0x7c 可能出现在其中一个 unicode 字节中?

喜欢

A.||B..|C..

其中第 2 和第 3 字节实际上是 unicode 字符的一部分。如果我使用 | 解析 作为分隔符,它会产生错误的值。谢谢

4

2 回答 2

1

“unicode character”这个表达似乎意味着“一个字符的UTF-16编码”(从评论来看)。那么答案是任何 Ascii 控制字符和任何 Ascii 字符都可能出现在那里(更准确地说,UTF-16 编码数据的字节之一可能与表示 Ascii 代码中字符的字节一致)。简单地说,一个 Ascii 字符的 UTF-16 编码由 0 字节和一个包含 Ascii 代码值的字节组成。并且,例如 U+7C7C CJK UNIFIED IDEOGRAPH-7C7C (xiān) 的 UTF-16 编码由两个0x7C 字节组成。

请注意,垂直线“|” U+007C(Ascii 中的 0x7C)在任何正常术语中都不是控制字符。Ascii 控制字符为 0x00 到 0x1F 和 0x7F。(SPACE 0x20 有时被描述为既是控制字符又是图形字符,但这很容易混淆,现在通常避免使用。)

要获得解析问题的帮助,您应该更准确地指定数据的格式。这种格式似乎设计得很糟糕,因为它不能被明确地解析,如果这个想法(看起来)是一个 Ascii 字符后面跟着一个 UTF-16 编码的可变数据量。例如,在“A..|B....|C..”中,您无法真正知道(没有附加规则)您在此处显示为“|B”(字节 0x7C 0x42)的内容实际上不是 UTF-16数据,表示 U+7C42 或 U+427C(取决于 UTF-16 的字节顺序)。

于 2013-08-26T05:23:01.603 回答
0

这取决于 Unicode 编码。

如果你使用的是UTF8,没问题

UTF16、UTF32(可能是其他)可能有代表“|”的字节 在他们中。

鉴于您的文件肯定不是 UT16 也不是 UTF32,它可能会起作用。

于 2013-08-26T03:47:54.160 回答