我正在解析混合有ASCII和Unicode字符的二进制数据。这是一个例子:
A .. | B .... | C ..
其中2个点代表一个Unicode字符的两个字节。
我的问题是..使用字段分隔符(|)(0x7c)解析此数据是否安全?还是有可能0x7c出现在一个unicode字节之一中?
喜欢
A. || B .... | C ..
其中第2个和第3个字节实际上是unicode字符的一部分。如果我使用|解析 作为分隔符,它将产生错误的值。谢谢
表述“ unicode字符”似乎表示“字符的UTF-16编码”(从注释中判断)。那么答案是,任何Ascii控制字符和任何Ascii字符都可能出现在此处(更确切地说,UTF-16编码数据的字节之一可能与代表Ascii代码中字符的字节重合)。通常,Ascii字符的UTF-16编码由0字节和包含Ascii代码值的字节组成。并且,例如,U + 7C7C CJK统一IDEOGRAPH-7C7C(xiān)的UTF-16编码由两个0x7C字节组成。
请注意,垂直线“ |” 在任何常规术语中,U + 007C(Ascii中为0x7C)都不是控制字符。ASCII控制字符为0x00至0x1F和0x7F。(有时将空格0x20既描述为控制字符又描述为图形字符,但这是令人困惑的,如今通常可以避免使用。)
为了获得有关解析问题的帮助,您应该更准确地指定数据格式。该格式似乎设计得很差,因为如果想法(看起来)是Ascii字符后面跟随着可变数量的UTF-16编码数据,则无法明确解析该格式。例如,在“ A .. | B .... | C ..”中,您真的不知道(没有其他规则)在这里显示为“ | B”(字节0x7C 0x42)实际上不是UTF-16数据,代表U + 7C42或U + 427C(取决于UTF-16的字节序)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句