Re: UTF-8 Erkennung



Erich Wagner schrieb:

Ich suche Hilfe zu einem Problem. Ich möchte eine Datei prüfen, ob diese UTF-8 oder ANSI codiert ist. Gibt es dafür in Java eine Klasse, die solche Sachen prüfen kann, oder muss man selbst irgendwas stricken?

Ich habe so etwas geschrieben. Weil wir im Projekt ständig UFT-8 als Eingangsdaten bekamen mit ISO-8859-1 codierten Sonderzeichen.

Ich hab mir so eine Art Methode is_UTF oder checkEncoding vorgestellt.

So ähnlich. Wenn du interesse hast schicke ich dir das mal per mail.
Ist c++ - Code, aber kannst du fast 1:1 in Java übernehmen.

Ein paar Sachen zur Erklärung:
ASCII (an sich) meint Zeichen von 0-127. Diese sind aber in UTF-8 identisch. D.h. ASCII ist eine echte Untermenge von UTF-8.

Was du meinst sind sicher Zeichensätze wie cp850, cp437, cp1252, ISO-8859-1, ISO 8859-1 (bemerke das fehlende "-": das ist wichtig!)
etc. pp.
Diese sind aber von 0-127 auch mit ASCII (und damit UFT-8) identisch.

Der ganze Spass funktioniert nur, wenn Umlaute und ähnliches im Text sind. Und weil die üblichen Umlaute keine gültigen UTF-8-Sequencen sind. Die Unterschiedung erfolgt daher folgendermassen:
a) enthält gültige UTF-8 Sequenzen mit mehr als einem Byte (sonst ASCII)
b) enthält ungültige UTF-8 Sequenzen

Wenn nicht a und nicht b -> keine Unterschiedung möglich (und notwendig)
Wenn a und nicht b -> höchstwahrscheinlich UTF-8.
Wenn nicht a und b -> höchstwahrscheinlich kein UTF-8
Wenn sowohl a als auch b -> höchstwahrscheinlich Mischmasch oder kein UTF-8.

Welche Codepage es dann tatsächlich ist cp850 oder cp1252 z.B. kann man nur durch Raten ermitteln oder durch bekannte Zeichen. Weiss man was es ist, kann man es mit Java einfach konvertieren. Mit

String(byte[] bytes, String codepage);

und

byte[] String.getBytes(String codepage);


.



Relevant Pages

  • Re: Zeichenketten konvertieren
    ... deren interne Kodierung ist zwar meines Wissens UTF-16, aber das Script sieht ja nur eine Sequenz von Zeichen, deren Kodierung nicht relevant ist. ... Was nun das konvertieren von ASCII in UTF-8 angeht, frage ich mich allerdings, was das bewirken soll, ASCII enthaelt 128 Zeichen und diese 128 Zeichen sind auch als Untermenge in Unicode enthalten und da in UTF-8 auch genau so kodiert wie in ASCII. ...
    (microsoft.public.de.german.scripting.wsh)
  • Re: Enhanced Unicode support for "Go" tools
    ... maybe Rene and Randy to note, perhaps - is an "ASCII compatible" ... version of UNICODE...in fact, for strict 7-bit ASCII, UTF-8 and ... characters so, being on Windows, that opinion makes great sense ... where the majority of the supported languages ...
    (alt.lang.asm)
  • Re: Stringkomprimierung
    ... > Er sollte vielmehr darauf achten, sich nicht durch das falsche Encoding ... In Java-String können halt alle Zeichen ... UTF-16, nicht UTF-8. ... The Java Language Specification: http://java.sun.com/docs/books/jls/index.htmls ...
    (de.comp.lang.java)
  • Re: Format of string output of a socket server
    ... ASCII is the same no matter what byte encoding is used. ... By definition any ASCII string is in UTF-8 encoding. ... The client program can then convert to Unicode or whatever they see fit? ... I am writing a socket server to deliver telephony events to clients on ...
    (microsoft.public.win32.programmer.networks)
  • Re: Wasteful internationalization
    ... Non-MIME messages are assumed to be in ASCII, ... Larry keep posting with his old newsreader. ... and they use UTF-8 instead of UCS-2 ... I don't have Flash installed (because I can't stand web pages ...
    (comp.lang.ada)