我正在研究处理UTF-8
编码的事情,我发现自己在问这个问题:
UTF-8
编码的字符串?即。 0x1111111X
例如,我正在编写一小段代码,它们查看字节流中的当前位置,并告诉您用了多少字节来表示流中该位置的代码点。
0x0XXXXXXX
只是1 0x10XXXXXX
oops,我们在一个连续字节中,
搜索上游以查找前导字节0x11XXXXXX
算上了
领先1的数量,这就是答案0x1111111X
错误,这不是
可能在UTF-8
!!!怎么办!?!?我正在考虑返回一个错误值,但想知道我是否应该将其替换为一些更可预测的错误字形(我的意思是代表所述字形的代码点)作为副作用。后来当我做一些更复杂的事情时,比如跳过字符串并发现前导字节后面没有正确数量的连续字节......我想我也应该“修复”它。
标准做法是将错误编码的字符串断开,或者更改它们并使它们出错但至少要好看吗?
答案 0 :(得分:0)
最常见的方法是,如果输入不正确,则抛出有意义的错误并停止。
有很多充分的理由这样做:
目的:任何时候你到达这样一个点,你必须考虑: 我的功能的目的是什么?为什么我想出了写它的想法?
另外:修复uft8的函数修复代码也可以在其他地方使用,因此将修复(目的,简单性,可维护性和正确性参数再次分开)完全有意义。
即使您预计会出现错误,我也希望将编码和修补代码分开 您可以在外部环境中重复使用修补代码。
如果您真的想在编码时修改utf8代码,我会使用这样的模式:
try {
q = encode(s);
} catch(encodingerror) {
log(encodingerror);
t = fixcode(s);
q = encode(t);
}