当编码ASCII范围之外的字符时,UTF-16或UTF-32是否具有非可打印ASCII范围内的字节值?

时间:2013-01-24 22:20:35

标签: unicode

我希望在使用Unicode编码方案编码的文本的原始字节流中查找不可打印的ASCII字符时使用一些快捷方式。

我知道,例如,在UTF-8编码中,如果使用多个字节编码字符,则每个字节将始终为=>因此,如果一个字节的值为< 32我知道这是一个不可打印的ASCII字符。我想知道我是否可以使用UTF-16和UTF-32进行类似的快捷方式。

我知道UTF-16和UTF-32对编码的ASCII字符使用零填充,但想知道非ASCII范围字符中的单个字节是否可能小于32。

基本上我想知道我是否可以可靠地扫描32位以下ASCII字符的字节(就像我使用UTF-8一样),而不必将流解码为字符。

作为参考,我正在寻找换行符(10,13)来将文本索引到行中,并查看这样做的最佳方式,即无需解码为字符。

1 个答案:

答案 0 :(得分:3)

UTF-32是一种简单,简洁的编码。每个字符都由其32位代码点直接表示。没有像UTF-8这样的规定,在非ASCII字符的中间永远不会找到ASCII字节。当“编码”为UTF-32时,\uxxxxxx10\uxxxx10xx\uxx10xxxx\u10xxxxxx形式的任何代码点都将包含字节0x10

但是,因为每个字符总是一个完整的32位,所以可以以4字节块的形式读取流,并查看4字节值0x000000100x00000013