unicode字符中可以有ascii控制字符吗



我正在分析混合了ascii和unicode字符的二进制数据。这里有一个例子:

A|B.…|C.

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

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

A||B.…|C.

其中所述第二和第三字节实际上是unicode字符的一部分。如果我使用|作为分隔符进行解析,就会产生错误的值。感谢

表达式"unicode character"似乎意味着"字符的UTF-16编码"(从注释中判断)。那么答案是,任何Ascii控制字符和任何Asciii字符都可能出现在那里(更确切地说,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。(SPACE 0x20有时被描述为既是控制字符又是图形字符,但这很令人困惑,现在通常都会避免。)

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

它取决于Unicode编码。

如果您使用的是UTF8,没有问题

UTF16、UTF32(可能是其他)中可能有表示"|"的字节。

考虑到您的文件肯定不是UT16,也不是UTF32,它很可能会工作。

最新更新