java ersetzen deutsche Umlaute

8

Ich habe das folgende Problem. Ich versuche, deutsche Umlaute wie ä , ö , ü in Java zu ersetzen. Aber es funktioniert einfach nicht. Hier ist mein Code:

%Vor%

Ein ä bleibt ein ä und so weiter. Ich weiß nicht, ob dieses Problem etwas mit der Kodierung zu tun hat, aber die Zeichenfolge enthält genau das Zeichen, das ich ersetzen möchte.

Vielen Dank im Voraus

    
user2841991 21.09.2015, 13:16
quelle

7 Antworten

4

Das hat endlich für mich funktioniert:

%Vor%

Vielen Dank für all eure Antworten und Hilfe. Es war schließlich eine Mischung aus Nafas (mit der neuen Zeichenfolge) und Joop Eggen (die richtige Ersetzung-Anweisung). Du hast mein Dankeschön viel Dank!

    
user2841991 22.09.2015, 06:06
quelle
11

Zuerst gibt es ein kleines Problem in Unicode:

  • ä könnte ein Codepunkt SMALL_LETTER_A_WITH_UMLAUT oder sein zwei Codepunkte: SMALL_LETTER_A, gefolgt von COMBINING_DIACRITICAL_MARK_UMLAUT.

Dafür kann den Unicode-Text normalisieren .

%Vor%

Das C bedeutet compose und würde die kompakte Version ergeben.

Das zweite, eher prozesische Problem ist, dass die Codierung der Java-Quelle im Editor dieselbe sein muss wie für den javac -encoding ... -Compiler.

Sie können testen, ob die Kodierung korrekt ist, indem Sie (testweise) das U-Escaping verwenden:

%Vor%

Meine Vermutung ist, dass dies das Problem sein könnte. Die internationale Norm scheint UTF-8 für Java Quellen und Kompilierung verwendet zu haben.

Außerdem können Sie

verwenden %Vor%

ohne Regex ersetzen, schneller sein.

    
Joop Eggen 21.09.2015 13:26
quelle
4

Ihr Code sieht gut aus, replaceAll() sollte wie erwartet funktionieren.

Versuchen Sie dies, wenn Sie auch die Großschreibung beibehalten möchten (z. B. ÜBUNG wird UEBUNG , nicht UeBUNG ):

%Vor%

Quelle

    
user1438038 21.09.2015 13:26
quelle
2

KODIERENDE KODIERUNG ENCODIEREN ....

Unterschiedliche Eingabequellen können zu Komplikationen bei der String-Codierung führen. Zum Beispiel kann eine UTF-8 Kodierung haben, während die andere ISO

ist

einige Leute vorgeschlagen, dass der Code für sie funktioniert, daher ist es am wahrscheinlichsten, dass Ihre Strings unterschiedliche Codierung während der Verarbeitung haben. (Unterschiedliche Codierung führt zu einem anderen Byte-Array, also kein Ersetzen ...)

Um Ihr Problem von seiner Wurzel zu lösen, müssen Sie sicherstellen, dass jede Ihrer Quellen genau die gleiche Kodierung verwendet.

probiere diese Übung und es hilft dir hoffentlich, dein Problem zu lösen:

1-versuche das:

%Vor%

Der nächste Schritt besteht darin, zu sehen, wie der orgi -String gebildet wird. Wenn Sie beispielsweise vom Web empfangen haben, stellen Sie sicher, dass Ihre POST- und GET-Methode Ihre bevorzugte Codierung verwendet

EDIT 1:

versuche das:

%Vor%

Wenn dieser nicht funktioniert, versuchen Sie Folgendes:

%Vor%     
nafas 21.09.2015 14:17
quelle
1

Ich habe gerade versucht, es auszuführen, und es läuft gut.

Wenn Sie keine regulären Ausdrücke verwenden, verwende ich string.replace anstatt string.replaceAll , da es etwas schneller ist als letzteres. Der Unterschied zwischen ihnen ist hauptsächlich, dass replaceAll mit Regex umgehen kann.

EDIT: Gerade bemerkt, Leute in den Kommentaren haben die gleichen vor mir gesagt, also wenn Sie Theres gelesen haben, können Sie ziemlich ignorieren, was ich sagte, wie das Problem an anderer Stelle in Ihrem Code existiert, wie dieser Ausschnitt funktioniert wie erwartet.

    
Vistari 21.09.2015 13:26
quelle
1

Funktioniert gut, wenn ich es versuche, also muss es ein Kodierungsproblem sein.

Überprüfen Sie Ihre Systemcodierung. Möglicherweise möchten Sie -encoding UTF-8 zu Ihrer javac Compiler-Befehlszeile hinzufügen.

%Vor%     
Klas Lindbäck 21.09.2015 13:28
quelle
0

Ich musste die Antwort von user1438038 ändern:

%Vor%

Dies sollte auf jeder Zielplattform funktionieren (ich hatte Probleme mit einem Tomcat unter Windows).

    
dermoritz 23.11.2017 08:21
quelle

Tags und Links