我需要处理短字符串的大名单(主要在俄罗斯,但任何其他语言是可能的,包括从猫走在键盘上随机垃圾)。检测一个字符串是双重编码的UTF-8
其中一些字符串将以UTF-8编码两次。
我需要可靠地检测给定的字符串是否被双重编码,并修复它。我应该这样做,而不使用任何外部库,只是通过检查字节。检测应该尽可能快。
的问题是:如何检测一个给定的字符串在UTF-8编码的两倍?
更新:
原始字符串是UTF-8。下面是做第二编码的AS3代码(不幸的是我没有在客户端代码控制,所以我不能修复此):
private function toUTF8(s : String) : String {
var byteArray : ByteArray = new ByteArray();
byteArray.writeUTFBytes(s);
byteArray.position = 0;
var res : String = "";
while(byteArray.bytesAvailable){
res += String.fromCharCode(byteArray.readUnsignedByte());
}
return res;
}
myString = toUTF8(("" + myString).toLowerCase().substr(0, 64));
注toLowerCase()
电话。也许这可能有帮助?
你是什么意思由UTF8双编码? ? – 2011-02-17 17:50:44
@Martin:FWIW,我的答案假设它意味着在Encoding X中将文本转换为UTF-8字节,然后将这些字节重新解释为Encoding X并将其转换为UTF-8字节。换句话说,当你错误地将UTF-8文件解释为ISO-8859-1(或其他),然后“将其转换为UTF-8”时会发生什么。 – 2011-02-17 18:04:07
那么,原始文本是UTF-8,它又一次被buggy客户端库编码为UTF-8。 (我会尝试获取有关该库假定文本所在编码的更多详细信息。) – 2011-02-17 18:37:10