1

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

例如,我知道在 UTF-8 编码中,如果一个字符使用多个字节编码,每个字节将始终 => 128,因此如果一个字节的值 < 32 我知道它是一个不可打印的 ASCII 字符。我想知道是否可以使用 UTF-16 和 UTF-32 采取类似的捷径。

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

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

作为参考,我正在寻找换行符 (10, 13) 以将文本索引到行中,并寻找最佳方法,即不解码为字符。

4

1 回答 1

3

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

但是,由于每个字符始终是完整的 32 位,因此您可以读取 4 字节块中的流并查看 4 字节值0x000000100x00000013.

于 2013-01-24T22:26:20.890 回答