|
|||
UTF-7 und UTF-32
Hi ich experimentiere gerade ein wenig mit einem von mir erstellten Programm herum. Dazu habe ich eine Testdatei in Ascii-Format gespeichert.
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> Test-Datei </title> </head> <body> <p>Das ist eine Test-Datei</p> </body> </html> Zitat:
Zitat:
MfG gabischatz |
Sponsored Links |
|
|||
Was ist deine Absicht?
(Die Ausgabe, die du postest, ist sicherlich eine Interpretation der Daten als 1-Byte-Zeichensatz wie ISO-8859-1 oder Windows-1252. Das ist „richtig“, wenn es das ist, was du willst.) |
Sponsored Links |
|
|||
Hi ich schreibe gerade mit C# ein Programm mit dem ich ermitteln kann, in welchem Format eine Datei gespeichert wurde.
Um zu ermitteln ob ich ein Korrektes Ergebnis habe, habe ich mit Scriptly eine Datei erstellt und diese in verschiedene Formate konvertiert. Das Programm läuft soweit ok. Ich dachte mir erstellst du selber Kopien dieser Datei in den verschiedenen Formaten und machst eine weitere Testreihe. Dabei sind die beiden Dateien entstanden. Mit der UTF-32 kann ich leben, denke die ist Ok aber die UTF-7 da weis ich nicht so richtig ob das so Ok ist. Zitat:
Jetzt will ich noch ein Tool einbauen das falsch Kodierte Dateien im richtigen Format speichert oder umgekehrt. Grüsse |
|
|||
Verwende am besten durchgängig UTF-8, das ist auch W3C Empfehlung.
-> Character encodings Die Browser müssen UTF-7 oder UTF-32 nicht können. Bedenke auch das Browser ISO-8859-1 als Windows CP1252 interpretieren. Wozu also der Aufwand.
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..." Aus einem Forum. |
|
|||
Die UTF-7-Datei scheint aber korrekt zu sein, ja.
Es ist praktisch allerdings mehr oder weniger unmöglich (d. h. nur mit Heuristiken „möglich“), zu entscheiden, ob eine Datei in UTF-7 kodiert ist, weil UTF-7 gewissermaßen eine Untermenge von 7-Bit-ASCII ist und 7-Bit-ASCII eine Untermenge diverser anderer Zeichensätze (etwa ISO-8859-* oder Windows-1252 oder sogar UTF-8). Soll heißen: Eine gültige UTF-7-Datei ist zum Beispiel auch eine gültige UTF-8-Datei. Geändert von mermshaus (10.11.2013 um 22:50 Uhr) |
|
|||
Wie schon gesagt erkennen kann das Programm alles, auch wenn es fürs Internet nicht wichtig ist. Mir ging es nur darum, wie schwer ist es zu erkennen ob eine Datei im Ascii oder UTF-8 Modus gespeichert wurde. Viele gute Programme tun sich schwer die Datei im richtigen Modus zu laden, so auch Scriptly.
Nachtrag: ich liefere es nach sobald ich weitere Tests fertig habe oder per Nachfrage. |
|
|||
Zitat:
Die resultierenden Binärdaten geben diese Unterscheidung schlicht und ergreifend nicht her, weil sie in jedem dieser Zeichensätze identisch sind. Das ist ungefähr so, als solltest du anhand der Zeichenfolge „abcde test text“ sagen, was die Muttersprache des Autors ist. Es scheint anhand des Alphabets sinnvoll, in Richtung US-Amerikaner, Engländer, Deutscher zu gehen – aber am Ende ist es doch ein Chinese. Du kannst nur mit mehr oder weniger genauem Hintergrundwissen (und mit guten oder schlechten Präferenzen in Zweifelsfällen) raten. Dasselbe tut auch ein Editor, der dir "Hallo Welt" als beispielsweise UTF-8 oder Windows-1252 ausweist. Der Editor nimmt da – je nach Betriebssystem/Version – an, dass im Zweifel schon das und das sinnvoll sein wird. Geändert von mermshaus (10.11.2013 um 23:23 Uhr) |
|
|||
Ergänzend:
Bitvergleich für den Buchstaben A Code:
ISO-8859-x 01000001 ASCII 01000001 Amiga 01000001 Atari 01000001 Apple 01000001 UTF-8 00000000 01000001
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..." Aus einem Forum. |
|
|||
Sicher, dass das UTF-8 ist? (Da ist "A" eigentlich auch nur ein Byte. Das ist bei dir etwa UTF-16BE.)
Mit Sonderzeichen (das bedeutet gemeinhin: Zeichen, die nicht in 7-Bit-ASCII enthalten sind) wird es schon eindeutiger, aber auch nicht wirklich besser. Nehmen wir mal die beiden Bytes 0xC3 0xA4. In UTF-8 ergeben die (zusammen) ein "ä". In ISO-8859-1 und Windows-1252 ergeben die "ä". In ISO-8859-7 ergeben die "Γ€". Auch in anderen Zeichensätzen ist 0xC3 0xA4 eine grundsätzlich korrekte Folge von Bytes. Man kann jetzt heuristisch und mit Weltwissen sagen, dass die Folge 0xC3 0xA4 wahrscheinlich ein Indiz dafür ist, dass die Eingabe als UTF-8 interpretiert werden sollte, weil ein deutscher a-Umlaut irgendwie mehr Sinn ergibt als "Γ€" (liebe Griechen, ich bitte euch…). Andererseits ist vielleicht inhaltlich tatsächlich "Γ€" gemeint (warum auch immer – mein Griechisch ist eingerostet). Der Punkt ist: Wir können es nicht ausschließen. Wir können letztlich nur auf Basis von Vermutungen raten. Formal ist alles korrekt und du kannst als Anwendung wohl kaum hergehen und den Leuten verbieten, inhaltlich was zu schreiben, das vielleicht Unsinn ist, wie auch immer du Unsinn dann definieren willst. Was ich gerade geschildert habe, ist eine komplexe Überlegung, die kompliziert zu programmieren ist. Ein großer Teil der Software, der Kodierungen „bestimmen“ muss, wird viel simpler vorgehen und beispielsweise einfach versuchen, die Datei als UTF-8 zu laden. Geht das schief (weil manche Bytefolgen kein korrektes UTF-8 ergeben), wird der nächste Zeichensatz versucht. Klappt es, wird die Datei als UTF-8 bezeichnet. (Vergleiche dazu auch den zweiten Parameter von Funktionen wie mb_detect_encoding. Der ist genau dafür gedacht.) Die Pointe ist: Das wird in etwa so gut funktionieren wie eine komplizierte Lösung, wenn man sich ein wenig daran hält, die Standardkodierung je nach Betriebssystem oder Land/Locale zu wählen. Wenn du erst UTF-8 versuchst (ob die Eingabebytes formal korrekt sind), dann Windows-1252 und dann vielleicht ISO-8859-1, dürftest du in „westlichen“ Ländern die meisten Sachen korrekt identifizieren. Geändert von mermshaus (11.11.2013 um 00:09 Uhr) |
Sponsored Links |
Sponsored Links |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
UTF 8 - Umlaute dann noch ändern oder nicht? | Test5000 | (X)HTML | 1 | 15.09.2011 14:22 |
ISO und UTF Problem | b74 | Serveradministration und serverseitige Scripte | 2 | 11.01.2009 22:25 |