解析 UTF-16 流并从编码错误中恢复

Parsing an UTF-16 stream and recovering from encoding errors

我正在实施一个简单的 line/column 计数算法,用于在 UTF-16 流中计数 "graphemes"。像往常一样,处理错误是棘手的部分。

例如如何处理新行后的 low surrogatecombining character

标准建议如何处理这个问题?中止解析?尝试重新同步?如果可以,怎么做?

我知道一个可能的答案是 "RTFM",但考虑到标准的庞大规模,这项任务有点令人生畏。

如果您有一个低代理项而没有相应的高代理项,那么您的 UTF-16 序列无效。该标准不强制执行特定的 error-handing 策略,但您可以选择忽略它、中止解析或将其替换为 U+FFFD(替换字符)——任何对您的应用程序有意义的内容(如果您只是忽略它,请参阅 Section 2.7). A stray surrogate will be captured by rules GB4 and GB5 的最后一段。

杂散组合标记完全有效,不需要任何特殊处理。他们将被 rule GB9.

捕获