解析 UTF-16 流并从编码错误中恢复
Parsing an UTF-16 stream and recovering from encoding errors
我正在实施一个简单的 line/column 计数算法,用于在 UTF-16 流中计数 "graphemes"。像往常一样,处理错误是棘手的部分。
例如如何处理新行后的 low surrogate 或 combining character?
标准建议如何处理这个问题?中止解析?尝试重新同步?如果可以,怎么做?
我知道一个可能的答案是 "RTFM",但考虑到标准的庞大规模,这项任务有点令人生畏。
如果您有一个低代理项而没有相应的高代理项,那么您的 UTF-16 序列无效。该标准不强制执行特定的 error-handing 策略,但您可以选择忽略它、中止解析或将其替换为 U+FFFD
(替换字符)——任何对您的应用程序有意义的内容(如果您只是忽略它,请参阅 Section 2.7). A stray surrogate will be captured by rules GB4 and GB5 的最后一段。
杂散组合标记完全有效,不需要任何特殊处理。他们将被 rule GB9.
捕获
我正在实施一个简单的 line/column 计数算法,用于在 UTF-16 流中计数 "graphemes"。像往常一样,处理错误是棘手的部分。
例如如何处理新行后的 low surrogate 或 combining character?
标准建议如何处理这个问题?中止解析?尝试重新同步?如果可以,怎么做?
我知道一个可能的答案是 "RTFM",但考虑到标准的庞大规模,这项任务有点令人生畏。
如果您有一个低代理项而没有相应的高代理项,那么您的 UTF-16 序列无效。该标准不强制执行特定的 error-handing 策略,但您可以选择忽略它、中止解析或将其替换为 U+FFFD
(替换字符)——任何对您的应用程序有意义的内容(如果您只是忽略它,请参阅 Section 2.7). A stray surrogate will be captured by rules GB4 and GB5 的最后一段。
杂散组合标记完全有效,不需要任何特殊处理。他们将被 rule GB9.
捕获