我正在使用混合的ascii和unicode字符解析二进制数据。这是一个例子:
一个.. |乙.... | C ..
其中2个点表示unicode字符的两个字节。
我的问题是..使用字段分隔符(|)(0x7c)解析此数据是否安全。或者有可能0x7c出现在其中一个unicode字节中?
像
A. ||乙.... | C ..
其中第二和第三字节实际上是unicode字符的一部分。如果我使用|解析作为分隔符,它会产生错误的值。感谢
答案 0 :(得分: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字节组成。
请注意,VERTICAL LINE“|”U + 007C(Ascii中的0x7C)不是任何常规术语中的控制字符。 Ascii control characters是0x00到0x1F和0x7F。 (SPACE 0x20有时被描述为控制角色和图形角色,但这是令人困惑的,现在通常会被避免。)
要获得有关解析问题的帮助,您应该更准确地指定数据的格式。格式似乎设计得很差,因为无法明确地解析,如果想法(似乎)Ascii字符后跟UTF-16编码的可变数据量。例如,在“A .. | B .... | C ..”中,你真的不知道(没有附加规则)你在这里显示为“| B”(字节0x7C 0x42)实际上不是UTF-16数据,代表U + 7C42或U + 427C(取决于UTF-16的字节顺序)。
答案 1 :(得分:0)
这取决于Unicode编码。
如果您使用的是UTF8,没问题
UTF16,UTF32(也许是其他人)可能有代表“|”的字节在他们中间。
鉴于您的文件肯定不是UT16而不是UTF32,它可能会起作用。