2009-08-20 6 views
2

Ich habe einen Byte-Stream, der UTF-8-Daten sein kann, oder es kann ein Binärbild sein. Ich sollte in der Lage sein, eine ungefähre Schätzung darüber zu machen, welche es ist, indem ich die ersten 100 Bytes oder so prüfe.Was ist eine gute Heuristik zu sehen, wenn eine Reihe von Bytes als UTF-8 in Java codiert sind?

Allerdings habe ich nicht genau herausgefunden, wie man das in Java macht. Ich habe versucht, Dinge wie die folgenden zu tun:

neue Zeichenfolge (Bytes, "UTF-8"). Teilzeichenfolge (0,100). Matches (". * [^ \ P {Print}]" um zu sehen, ob Die ersten 100 Zeichen enthalten nicht druckbare Zeichen, aber das scheint nicht zu funktionieren.

Gibt es einen besseren Weg, dies zu tun?

Antwort

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

In wohlgeformten UTF-8 muss einem Byte mit gesetztem obersten Bit ein anderes Byte folgen oder vorangestellt werden, für das das obere Bit gesetzt ist; der erste eines Laufs muss mit den beiden obersten gesetzten Bits beginnen, und der Rest muss das nächste-oben-Bit löschen (in der Tat muss der erste einer Folge von N Bits des oberen Bits die oberen N Bits gesetzt haben und der nächste eins klar).

Diese Eigenschaften sollten leicht zu finden sein.

0

Ich schlage vor, ICU4J

ICU ist ein reifen, breit verwendete Satz von C/C++ und Java-Bibliotheken für Softwareanwendungen Unicode und Globalisierung unterstützen. ICU ist weitestgehend portabel und bietet auf allen Plattformen und zwischen C/C++ - und Java-Software die gleichen Ergebnisse.

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. –

+0

@ S.L.Barth: Dies ist nur ein Zeiger auf eine Lib, die helfen könnte, nicht eine vollständige Antwort. Es scheint jedoch legitim. – Seki

Verwandte Themen