我需要处理一个大量的短字符串列表(主要是俄语,但也可能包括其他语言,包括猫走在键盘上留下的随机垃圾)。
其中一些字符串将被两次编码为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()
方法的调用。也许这会有所帮助?