Utf 8 Unicode-正确的做法
我正在研究处理Utf 8 Unicode-正确的做法,utf-8,Utf 8,我正在研究处理UTF-8编码的东西,我发现自己在问这样一个问题: 当我遇到一个从未出现在内存中的字节时,我该怎么办 UTF-8编码字符串 i、 e.0x1111111X 例如,我正在编写一小段代码,它查看字节流中的当前位置,并告诉您有多少字节用于表示流中该位置的代码点 0x0XXXXXXX1 0x10XXXXXXoops,我们在一个延续字节中, 向上搜索以查找前导字节 0x11XXXXXX 前导1的数量,这就是答案 0x1111111Xerr,这不是 在UTF-8中可能!!!怎么办 我正
UTF-8
编码的东西,我发现自己在问这样一个问题:
- 当我遇到一个从未出现在内存中的字节时,我该怎么办
编码字符串UTF-8
0x1111111X
例如,我正在编写一小段代码,它查看字节流中的当前位置,并告诉您有多少字节用于表示流中该位置的代码点
10x0XXXXXXX
oops,我们在一个延续字节中, 向上搜索以查找前导字节0x10XXXXXX
前导1的数量,这就是答案0x11XXXXXX
err,这不是 在0x1111111X
UTF-8中可能!!!怎么办李>
标准做法是将错误编码的字符串保留为断开状态,还是对其进行更改,使其出错,但至少要表现良好?最常见的方法是在输入不正确时抛出一个有意义的错误并停止 有很多很好的理由这样做:
- 速度:如果您试图修复错误,这通常会导致 即使输入正确,功能也会变慢
- 简单性:如果您试图修复任何错误,您的代码可能会变得非常复杂
- 可维护性和正确性:更容易确保功能正常工作 当输入与您正在使用的规范不匹配时停止。因为您只需根据规范检查输入
- 目的:任何时候你到了这样的地步,你必须考虑: 我的职责是什么?为什么我想到要写它 另外:修复uft8的函数fixcode也可以在其他地方使用,因此分离修复(目的、简单性、可维护性和正确性)是完全有意义的 即使您预期会出现错误,我还是希望将encode和fixcode分开,因为 您可以在外部上下文中重用修复代码
try {
q = encode(s);
} catch(encodingerror) {
log(encodingerror);
t = fixcode(s);
q = encode(t);
}
我想到了浏览器。如果设置了编码utf-8并使用非utf-8字符,则它们看起来像菱形中的问号。所以我认为你可以改变错误的字符。但是如果您发送或存储这些数据,那么显然您必须存储原始数据的副本。@qben是的,我确实考虑过这一点,但请看,这可能只是显示代码或一些底层处理库。我想我的问题是关于lib的,我不希望提到这个异常模式,它似乎是异常的一个糟糕用法,我可以想出一些简单的方法来实现。但也有一些优点,特别是关于重用/维护责任的分离。