【发布时间】:2018-09-30 11:20:16
【问题描述】:
我正在编写一个 UTF-8 解码器,但我不知道如何正确处理无效代码点:
- 代理
- 大于 0x10ffff 的代码点
假设,我想用 0xfffd 替换无效的代码点。现在,我应该如何更换它们?在我知道代码点无效后立即,还是应该解码/使用第一个字节要求的所有字节?
例如,假设 UTF-8 流包含:0xf4 0x90 0x80 0x80
这些字节解码为0x110000,一个无效的代码点。
但是,在第二个字节处,当0xf4 0x90 被处理时,我知道,无论最后两个字节是什么,它都不是有效的代码点。
那么,这个流应该产生一个错误(和一个替换),还是应该产生3个错误(因为0xf4 0x90无效,然后0x80和另一个0x80也无效)?
是否有强制执行此操作的标准?如果没有,最佳做法是什么?
【问题讨论】:
-
您忘记了过长的编码。
标签: utf-8