Определить, была ли строка дважды закодирована в 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 () . Может быть, это может помочь?

7
задан Alexander Gladysh 17 February 2011 в 19:02
поделиться