2009-08-20 2 views
2

J'ai un flux d'octets qui peut être des données UTF-8 ou peut-être une image binaire. Je devrais être en mesure de faire une estimation éclairée sur lequel il est en inspectant les 100 premiers octets ou plus.Quelle est une bonne heuristique pour voir si un ensemble d'octets sont encodés en UTF-8 en Java?

Cependant, je n'ai pas compris exactement comment faire cela en Java. J'ai essayé de faire des choses comme ceci:

new String (octets, "UTF-8"). Substring (0,100) .matches (". * [^ \ P {Print}]") pour voir si le Les 100 premiers caractères contiennent des caractères non imprimables, mais cela ne semble pas fonctionner.

Y a-t-il une meilleure façon de procéder?

Répondre

3
final Charset charset = Charset.forName("UTF-8"); 
    final CharsetDecoder decoder = charset.newDecoder(); 
    decoder.onMalformedInput(CodingErrorAction.REPORT); 

    try { 
     final String s = decoder.decode(ByteBuffer.wrap(bytes)).toString(); 
     Log.d(s); 
    } catch(CharacterCodingException e) { 
     // don't log binary data 
    } 
4

Dans un UTF-8 bien formé, un octet avec l'ensemble de bits supérieur doit être suivi ou précédé d'un autre octet dont l'ensemble de bits supérieur est défini; le premier d'une série doit commencer avec les deux bits les plus élevés et le reste doit avoir le bit next-to-top (en fait, le premier d'une série de N octets de bits supérieurs doit avoir les N bits supérieurs et le suivant un clair).

Ces caractéristiques devraient être assez faciles à rechercher.

0

Je suggère d'utiliser ICU4J

ICU est un ensemble mature, largement utilisé de C/C++ et les bibliothèques Java fournissant Unicode et le soutien de la mondialisation pour les applications logicielles. ICU est largement portable et donne aux applications les mêmes résultats sur toutes les plateformes et entre les logiciels C/C++ et Java.

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –

+0

@ S.L.Barth: Ceci est juste un pointeur vers une lib qui pourrait aider, pas une réponse complète. Cela semble légitime cependant. – Seki

Questions connexes