Texte mit Sonderzeichen einlesen-vergleichen
Wernherr
- php
Hallo,
als Eingabe sind u.a. auch franz. Texte der Art "réponse" zulässig.
Mein Programm soll diese Eingaben nun vergleichen mit der Konstanten "réponse".
Nun sieht allerdings der Text im Eingabefeld so aus: "réponse".
Was muss ich wie konvertieren, damit ein Vergleich möglich ist?
Danke!
Nun sieht allerdings der Text im Eingabefeld so aus: "réponse".
Was muss ich wie konvertieren, damit ein Vergleich möglich ist?
Du willst durchgehend die gleiche Kodierung verwenden. Dann auch dort, wo du statt "réponse" das "réponse" siehst. vermutlich kommen die Daten als UTF-8 kodierter String, Du schaust das aber in einer Umgebung an die entweder "ISO 8859-1", "ISO 8859-15" oder "windows 1252" beherrscht.
Für genaueren output brauchen wir genaueren input.
Jörg Reinholz
Hallo Jörg,
Du willst durchgehend die gleiche Kodierung verwenden. Dann auch dort, wo du statt "réponse" das "réponse" siehst. vermutlich kommen die Daten als UTF-8 kodierter String, Du schaust das aber in einer Umgebung an die entweder "ISO 8859-1", "ISO 8859-15" oder "windows 1252" beherrscht.
Ich verstehe nur Bahnhof.
Für genaueren output brauchen wir genaueren input.
$inp = $_POST['inputFeld'] /* Eingabe: réponse */
if ($inp == 'réponse') /* réponse == réponse */
.....
Gruß
Wernherr
@@Wernherr:
nuqneH
Ich verstehe nur Bahnhof.
Qapla'
Hi Gunnar,
Ich habe in meinem HTML-Dokument angegeben:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
und dort ist doch é vorhanden.
Aber wenn ich statt é ä angebe passiert der gleiche Fehler.
In Deinem anderen Beitrag hast Du auf ein Dokument verwiesen, in dem steht:
"Zum anderen ist es angebracht, dass das Script, welches die Formulardaten verarbeitet, prüft, ob die empfangenen Daten wirklich UTF-8-codiert sind (falls etwas schiefging, z.B. wenn der Nutzer die Zeichencodierung umgestellt hat)."
Ich wüsste nicht, dass ich beim Test irgendwie die Codierung umgestellt hätte. Ich wüsste auch nicht wie.
Gruß
Wernherr
@@Jörg Reinholz:
nuqneH
… aufs Abstellgleis?
Ein Artikel, der „UTF-8 Zeichensatz“ [sic!] im Titel hat und damit grundlegende Begriffe falsch verwendet, läuft in Gefahr, dass die Frage aufkommt, ob denn der Autor so richtig weiß, wovon er spricht.
UTF-8-Zeichen gehören zu den Sachen, die es nicht gibt.
Qapla'
@@Jörg Reinholz:
Ein Artikel, der „UTF-8 Zeichensatz“ [sic!] im Titel hat und damit grundlegende Begriffe falsch verwendet, läuft in Gefahr, dass die Frage aufkommt, ob denn der Autor so richtig weiß, wovon er spricht.
Und ich laß erst gestern, dass der Literturkritiker Reich-Ranicki verstorben sei.
Tach!
Ein Artikel, der „UTF-8 Zeichensatz“ [sic!] im Titel hat und damit grundlegende Begriffe falsch verwendet, läuft in Gefahr, dass die Frage aufkommt, ob denn der Autor so richtig weiß, wovon er spricht.
Und ich laß erst gestern, dass der Literturkritiker Reich-Ranicki verstorben sei.
Du könntest den Artikel fachlich aufwerten, wenn du die richtigen Begriffe verwenden und über die Unterschiede aufklären würdest. Und menschlich gewänne der Artikel, wenn du ein neutrales Beispiel für fehlerhafte Kodierungen verwenden und diese massiven Anschuldigungen an die nicht genannte Firma da raus lassen würdest. (Und das nabhängig davon, ob sie wahr sind oder nicht. Darüber möchte ich auch nicht diskutieren.)
dedlfix.
Du könntest den Artikel fachlich aufwerten, wenn du die richtigen Begriffe verwenden und über die Unterschiede aufklären würdest.
Ich könnte mir das überlegen. Allerdings bringen mir die "falschen" Begriffe eine nicht zu vernachlässigende Menge an Lesern. Man kann das so sehen, dass man von denen, die wegen eines solchen Problems eine Suchmaschine benutzen, nicht erwarten kann, dass diese die ultimativ korrekten Begriffe kennen. Denn dann hätten die ja sehr wahrscheinlich auch das Problem nicht...
Und menschlich gewänne der Artikel, wenn du ein neutrales Beispiel für fehlerhafte Kodierungen verwenden
und diese massiven Anschuldigungen an die nicht genannte Firma da raus lassen würdest. (Und das unabhängig davon, ob sie wahr sind oder nicht. Darüber möchte ich auch nicht diskutieren.)
Das Forum wäre auch definitiv nicht der Platz dafür. Nur soweit noch: die Warnung vor der nicht genannten Firma steht nicht zur Disposition, den Hintergrund möchte ich HIER auch keinesfalls diskutieren.
Tach!
Du könntest den Artikel fachlich aufwerten, wenn du die richtigen Begriffe verwenden und über die Unterschiede aufklären würdest.
Ich könnte mir das überlegen. Allerdings bringen mir die "falschen" Begriffe eine nicht zu vernachlässigende Menge an Lesern. Man kann das so sehen, dass man von denen, die wegen eines solchen Problems eine Suchmaschine benutzen, nicht erwarten kann, dass diese die ultimativ korrekten Begriffe kennen. Denn dann hätten die ja sehr wahrscheinlich auch das Problem nicht...
Du sollst nicht auf das Wort Zeichensatz verzichten. Die Begriffe sind nicht falsch, nur nicht für die richtigen Dinge verwendet. Eine Zeichenkodierung kommt nicht allein daher, sie braucht einen Zeichensatz, deren Zeichen sie in eine physische Form bringen kann. Wenn du korrekt "Zeichenkodierung" verwendest, verdrängt das den "Zeichensatz" lediglich an eine passende Erläuterung und nicht aus dem Dokument raus.
Das Forum wäre auch definitiv nicht der Platz dafür. Nur soweit noch: die Warnung vor der nicht genannten Firma steht nicht zur Disposition, den Hintergrund möchte ich HIER auch keinesfalls diskutieren.
Sie hat aber in diesem Artikel nichts verloren. Du magst in der Sache vielleicht recht haben, aber die Art und Weise, wie du das rüberbringst, lässt mich eher mit deinem "Opfer" sympathisieren. Das ist sicher nicht dein beabsichtigter Zweck.
dedlfix.
@@Gunnar:
UTF-8-Zeichen gehören zu den Sachen, die es nicht gibt.
Ist es nur dieser Begriff, der nicht stimmt oder ist der Artikel im Ganzen falsch?
@@Wernherr:
nuqneH
Ist es nur dieser Begriff, der nicht stimmt oder ist der Artikel im Ganzen falsch?
Wenn stattdessen von „Unicode-Zeichensatz“ bzw. von „UTF-8-Zeichencodierung“ gesprochen wird (natürlich nicht wahlweise, sondern je nach Kontext), steht da schon Sinnvolles drin.
Leider fehlt das Datum der Veröffentlichung. Einiges hat nämlich schon Staub angesetzt:
„Der setzt sich so nach und nach durch...“ Gemeint ist hier: die (Zeichencodierung). Und mittlerweile dürfte die Vergangenheitsform angebracht sein: UTF-8 hat sich durchgesetzt.
„Häufig liest man, man solle im HTML-Header mit
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
den Zeichensatz einstellen. Soll man auch.“
Und wieder: die Zeichencodierung. Den Zeichensatz kann man gar nicht einstellen; der ist für alle HTML-Dokumente Unicode.
Und in HTML5 soll man es nicht so tun, sondern mit
<meta charset="UTF-8">
Qapla'
UTF-8-Zeichen gehören zu den Sachen, die es nicht gibt.
Ist es nur dieser Begriff, der nicht stimmt oder ist der Artikel im Ganzen falsch?
Hi,
In dem Dokument steht:
Will man UTF-8 senden, dann muss man natürlich auch UTF-8 eingeben.
Bisher habe ich mit dem ganz einfachen Editor mit Standardeinstellungen (ANSI) von Windows gearbeitet. Ich werde also die von Dir empfohlenen Einstellungen vornehmen. Wie kann ich dann aber meine gesamten Dateien einfach in UTF-8 konvertieren?
Gruß
Wernherr
Tach!
Hier: Ihre Fahrkarte!
In dem Dokument steht:
Will man UTF-8 senden, dann muss man natürlich auch UTF-8 eingeben.
Das ist ja auch logisch. Auf einen Briefumschlag "200€" draufzuschreiben, ändert am Inhalt leider nichts. Und wenn 200€ draufsteht, aber nur 50 wertlose hamudistanische Nückel drin sind, ist auch was falsch.
Bisher habe ich mit dem ganz einfachen Editor mit Standardeinstellungen (ANSI) von Windows gearbeitet. Ich werde also die von Dir empfohlenen Einstellungen vornehmen. Wie kann ich dann aber meine gesamten Dateien einfach in UTF-8 konvertieren?
Öffnen und dabei dem Editor sagen, was die bisherige Kodierung war, danach umkodieren oder beim Speichern die neue Kodierung angeben. Den Notepad solltest du dabei meiden, denn der erzeugt nur UTF-8-kodierte Dokumente mit BOM und die mehr störend als nützlich. Notepad++ zum Beispiel kann UTF-8 ohne BOM erzeugen.
dedlfix.
Hallo dedlfix,
Notepad++ zum Beispiel kann UTF-8 ohne BOM erzeugen.
Wenn ich in Notepad++ unter Format angebe:
Konvertiere als UTF oder
Konvertiere als (UTF ohne BOM),
dann werden sofort statt der Umlaute Sonderzeichen angezeigt.
Wenn ich die Datei speichere und wieder mit Notepad++ öffne, so werden nach wie vor die Umlaute nicht angezeigt.
Was habe ich da falsch gemacht?
Gruß
Wernherr
Tach!
Notepad++ zum Beispiel kann UTF-8 ohne BOM erzeugen.
Wenn ich in Notepad++ unter Format angebe:
Konvertiere als UTF oder
Konvertiere als (UTF ohne BOM),
dann werden sofort statt der Umlaute Sonderzeichen angezeigt.
Was war es denn vorher? Daten kodieren sich nicht auf magische Weise in das gewünschte Zielformat. Rechts unten in der Ecke steht, was Notepad++ zu erkennen glaubt. Im Zweifelsfall lade dir das Hexeditor-Plugin (auch wenn das angeblich nicht ganz stabil sei). Markiere einen Umlaut und schalte in die Hex-Ansicht.
Wenn ich die Datei speichere und wieder mit Notepad++ öffne, so werden nach wie vor die Umlaute nicht angezeigt.
Was habe ich da falsch gemacht?
Du rätst wild herum, satt genau zu schauen, was vorliegt => Hexeditor.
dedlfix.
kann ich dann aber meine gesamten Dateien einfach in UTF-8 konvertieren?
Ein Beispiel, dieses in PHP zu tun steht drin. Unter Linux gibt es dafür das Programm iconv.
~> iconv -f ISO-8859-1 -t UTF-8 datei.txt
Das Programm gibt es auch für Windows. Ich weiß aber nicht, ob das die beste Option ist, denn ich habe über Windows schon mehr vergessen als viele je wussten.
Tach!
~> iconv -f ISO-8859-1 -t UTF-8 datei.txt
Das Programm gibt es auch für Windows. Ich weiß aber nicht, ob das die beste Option ist, denn ich habe über Windows schon mehr vergessen als viele je wussten.
Für massenhafte Konvertierungen lohnt es sicherlich, sich dieses Kommandozeilenprogramm zu besorgen. Für nur eine Handvoll Umkodierungen tun es auch die Editoren, die man sowieso hat oder haben sollte.
dedlfix.
Tach!
~> iconv -f ISO-8859-1 -t UTF-8 datei.txt
Das Programm gibt es auch für Windows. Ich weiß aber nicht, ob das die beste Option ist, denn ich habe über Windows schon mehr vergessen als viele je wussten.Für massenhafte Konvertierungen lohnt es sicherlich, sich dieses Kommandozeilenprogramm zu besorgen. Für nur eine Handvoll Umkodierungen tun es auch die Editoren, die man sowieso hat oder haben sollte.
Zunächst mag es eine Handvoll sein. Bedenkt man aber, dass die selbe Aufgabe womöglich oder (sehr) wahrscheinlich nochmals auf einen zukommt, dann lohnt nicht nur die Installation, sondern vielleicht auch Schreiben eines kleinen Skriptes für die Konvertierung und dessen Verankerung als eine der Aktionen für den Rechtsklick im Explorer.
Wenn man denn Windows benutzen muss.
@@Wernherr:
nuqneH
Mein Programm soll diese Eingaben nun vergleichen mit der Konstanten "réponse".
Nun sieht allerdings der Text im Eingabefeld so aus: "réponse".
Was muss ich wie konvertieren, damit ein Vergleich möglich ist?
Zum einen musst du dafür sorgen, dass die Daten mit der richtigen Zeichencodierung verarbeitet werden, zum anderen Normalisierungsformen beachten.
Qapla'
Hallo,
allgemeiner Tenor war ja, UTF-8 verwenden.
Nun habe ich gelesen, dass für die Konvertierung zunächst die Codierung der alten Ursprungsdatei angegeben werden muss.
Die mir vorliegenden Dateien wurden offensichtlich mit unterschiedlichen Werkzeugen (Editoren) erzeugt. Wie finde ich heraus, wie eine Datei codiert ist?
Man möge mir verzeihen, wenn codiert der falsch Begriff ist!
Gruß
Wernherr
Tach!
allgemeiner Tenor war ja, UTF-8 verwenden.
Nun habe ich gelesen, dass für die Konvertierung zunächst die Codierung der alten Ursprungsdatei angegeben werden muss.
Die mir vorliegenden Dateien wurden offensichtlich mit unterschiedlichen Werkzeugen (Editoren) erzeugt. Wie finde ich heraus, wie eine Datei codiert ist?
Wenn man das nicht weiß, kann man nur anhand von Vermutungen an die Sache herangehen. Es ist quasi wie eine Verschlüsselung, aber eine ganz leichte. Man kann davon ausgehen, dass hierzulande entweder ISO-8859-1 (auch Latin1 genannt und manchmal ANSI), Windows-1252 oder UTF-8 verwendet wurde. Der Unterschied zwischen ISO-8859-1 und Windows-1252 zeigt sich nur bei wenigen Zeichen. Eine Auflistung kennt unter anderem die Wikipedia: ISO-8859-1.
Du kannst wie folgt vorgehen. Öffne die Datei ohne weitere Verrenkungen. Kannst du alles lesen, besonders die Umlaute (und eventuelle Windows-1252-spezifischen Zeichen), ist alles bestens. Sind sie unlesbar, versuch dein Glück mit einer der beiden Kodierungen. Wenn du statt eines Umlautes zwei Zeichen siehst, hast du UTF-8 vorliegen und liest die Datei aber gemäß ISO-8859-1. Meist jedenfalls. Doppelt von ISO-8859-1 nach UTF-8 kodiert sieht genauso aus, wenn man gemäß UTF-8 liest. Im Zweifelsfall hilft da nur ein Blick mit dem Hexeditor, welche Bytes da nun konkret stehen.
Probier also einfach die Datei zu öffnen und gib beim Speichern UTF-8 an, oder je nach Editor muss man das vor dem Speichern explizit umkodieren.
Man möge mir verzeihen, wenn codiert der falsch Begriff ist!
Das ist richtig formuliert.
dedlfix.
Wie finde ich heraus, wie eine Datei codiert ist?
Linux: file -i dateiname
Windows: http://gnuwin32.sourceforge.net/packages/file.htm
(Ich sags doch immer: Ohne die Unix-Tools ist Windows zur Datenverarbeitung nicht zu gebrauchen.)
Tach!
Wie finde ich heraus, wie eine Datei codiert ist?
Linux: file -i dateiname
Solch ein Tool kann auch nicht zaubern, besonders nicht bei Plaintext, das muss man dazu sagen. Es kann anhand bestimmter Indizien auf eine Kodierung schließen, aber das Ergebnis ist prinzipbedingt nur bedingt richtig. Es kann vermuten, dass bei Vorhandensein einer BOM die entsprechende UTF-x-Kodierung vorliegt. Es kann beim Vorhandensein von gültigen und der Abwesenheit ungültiger UTF-8-Byte-Sequenzen UTF-8 vermuten. Es kann aber nicht zwischen ISO-8859-1 bis 15 unterscheiden. Das geht nicht ohne eine sprachliche Prüfung des Inhalts. Wie auch immer, zumindest wird es UTF-8 erkennen können und der Rest ist mit hoher Wahrscheinlichkeit ISO-8859-1/Windows-1252.
dedlfix.
Tach!
Post!
Wie finde ich heraus, wie eine Datei codiert ist?
Linux: file -i dateinameSolch ein Tool kann auch nicht zaubern, besonders nicht bei Plaintext, das muss man dazu sagen. Es kann anhand bestimmter Indizien auf eine Kodierung schließen, aber das Ergebnis ist prinzipbedingt nur bedingt richtig.
Ja. Mag alles sein, ich habe dazu nichts behauptet. Linux/Unix-Tools haben eine Manpage. file also auch. Aber file errät die Kodierung besser als die meisten der Leser in diesem Forum.
Und allemal schneller als ich.