Re: UTF-8 Erkennung
- From: Thomas Thiele <thomas.thiele@xxxxxx>
- Date: Thu, 30 Aug 2007 01:22:20 +0200
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);
.
- Follow-Ups:
- Re: UTF-8 Erkennung
- From: Paul Ebermann
- Re: UTF-8 Erkennung
- References:
- UTF-8 Erkennung
- From: Erich Wagner
- UTF-8 Erkennung
- Prev by Date: Re: Java vs. Pascal
- Next by Date: Re: Inner Classes: Darf das sein?
- Previous by thread: Re: UTF-8 Erkennung
- Next by thread: Re: UTF-8 Erkennung
- Index(es):
Relevant Pages
|