URL: https://www.overclockers.at/coding-stuff/url_encoding_ist_utf-8_oder_doch_nicht_120676/page_1 - zur Vollversion wechseln!
Hallo
Ich hab folgendes problem:
Ich muss einen String mit ß an eine Webseite aus JAVA heraus schicken. Deshalb kodiere ich ihn mit UTF-8 aber anstatt das %DF ankommt wird ß mit %C3%9F kodiert.
Zum Kodieren verwende ich URLEncoder.encode(str, "UTF-8");
Heißt das Encoding anders oder wie bekomme ich ein %DF?
%DF ist der Hex-latin1 Code fuer ß. UTF-8, wenn wir jetzt von UCS-2 ausgehen, verwendet fuer die nicht 7-bit ASCII Zeichen zwei Byte zur Codierung (wenn es sich ausgeht), also paszt %C3%9F eh.
laut standard passts eh aber ich brauch für die Seite an die ichs schick %DF
Dann darfst dus nicht UTF-8 encoden sondern latin1 
Ok danke hat jetzt funktioniert ... Aber normal is doch UTF-8 Kodierung bei URLs oder kann man sich das auch aussuchen?
Was hat das mit URLs zu tun?
Normalerweise schreibt man in den Header rein, welches Encoding man verwendet (iso-8859-1 = latin1)
EDIT: Sonst kriegen viele Unix-Benutzer nur Fragezeichen statt Umlauten zu sehen.
EDIT2: Aso, es geht echt um die URL. Keine Ahnung, wie das normal gehandhabt wird.
meinst du den header vom http request?
Hängt anscheinend davon ab, mit welchem Charset das Form dargestellt wird, von dem der Request kommt.
Wie's bei Filenamen gemacht wird, weiß ich nicht, aber am besten verwendet man einfach keine Umlaute in Filenamen.
Kann ich leider nicht ändern muss unbedingt ein ß bzw. Umlaute mitschicken.
Naja ... jetzt gehts eh, ich werd des einfach so lassn
Das ß ist aber wohl eh nicht im Filenamen, oder? Alles hinter dem Fragezeichen ist kein Problem, da kann sich das Verarbeitungsskript eigentlich frei aussuchen, wie es die Sonderzeichen interpretiert. Üblich ist offenbar iso-8859-1.
Stimmt aber laut Java API ist der Standard beim Verarbeiten UTF-8. Das Skript was ich ansteure ist aber eine ASP Seite und da kocht Microsoft wahrscheinlich wieder ihr eigenes Süppchen.
Jeder kocht sein eigenes Süppchen. Ich habe die HTTP Spezifikation jetzt zwar nur überflogen, aber gefunden hab ich zu dem Thema jedenfalls nichts. Man kann also machen, was man will.
Laut w3.org soll man URIs mit UTF-8 kodieren
siehe w3.org
Nur was ich nicht versteh dort steht:
ZitatRepresent each character in UTF-8 (see [RFC2279]) as one or more bytes.
Escape these bytes with the URI escaping mechanism (i.e., by converting each byte to %HH, where HH is the hexadecimal notation of the byte value).
Non-ASCII wird immer zu 2 oder mehr Bytes in UTF-8, und es gibt genau eine Möglichkeit, ein bestimmtes Unicode-Zeichen auf die Weise zu kodieren.
Was hier beschrieben ist, heißt aber nicht, dass du generell UTF-8 verwenden sollst, sondern es heißt nur, dass vom Autor der Seite geschriebene fehlerhafte (weil Nicht-ASCII-Zeichen enthaltende) HREFs vom Browser zu UTF-8 übersetzt werden sollen.
Was wiederum bedeutet das jedes empfangs Skript eigentlich die URL als UTF-8 kodiert erwarten kann.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026