Anderer Zeichensatz für String

Status
Nicht offen für weitere Antworten.

Bleiglanz

Gesperrter Benutzer
gar nicht, weil Java Strings "intern" keinen Zeichensatz HABEN

schau in die java.io.*, fast alle Reader/Writer Klassen haben einen Zusatzparameter im Konstruktor für das Charset

bzw. gibt es für String einen Kontruktor um aus einem byte[] + Charset einen String zu machen

und ebenso in java.lang.String eine Methode
byte[] getBytes(String charsetName)
 

The_S

Top Contributor
Heißt das praktisch, dass ich mir abschminken kann in einem JTextArea einen Text in einem anderen Zeichensatz auszugeben?
 

Bleiglanz

Gesperrter Benutzer
nein, heisst es nicht: der Text (String) wird gar nicht in einem "Zeichensatz" ausgegeben, er hat gar keinen!

was du meinst ist wahrscheinlich der "Font" - und für welche Unicodezeichen der Font ein darstellbares Symbol bereithält (das ist eine ganz andere Frage)
 

The_S

Top Contributor
Pass auf, ich habe folgenden Code um in einem anderen Zeichensatz eine Datei zu schreiben:

Code:
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("C:\\test.txt"), "Cp850"));

Aber das hätte ich jetzt gerne nicht in einer Textdatei ausgegeben sondern in einem JTextArea. Natrülich könnte ich die Datei wieder einlesen, aber das wäre doch sehr Performancelastig.
 

Bleiglanz

Gesperrter Benutzer
Ja wie liegt der Inhalt den vor? Was schreibst du in diese Datei???

Wenn du eh schon einen String hat ist doch nix zu tun???
 

The_S

Top Contributor
Code:
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("C:\\test.txt"), "Cp850"));
String sonderzeichen = "29 3r5ß ä-#a. .asd käa#fal #,#ä a #";
bw.write(sonderzeichen);
bw.close();

Ich will das ganze aber nicht in C:\test.txt speichern sondern in nem JTextArea.
 

The_S

Top Contributor
Roar hat gesagt.:
textarea.setTex(sonderzeichen) ??
Nö, ich will z. B. den String "Das ist kein MS-Dos Text denn ä, ö und ü werden Beispielsweise richtig dargestellt" in einen anderen Zeichensatz formatieren z. B. "Das ist MS-Dos Text, denn manche Zeichen werden nicht richtig dargestellt" und den anderen Zeichensatz dann ausgeben
 

Stefan1200

Top Contributor
Aber woher bekommst du denn den MSDos Text?
Falls du diesen aus einer Datei einliest, kannst du auch bei einem InputStream das Charset einstellen.
 

Bleiglanz

Gesperrter Benutzer
Code:
String s = "Das ist kein MS-Dos Text denn ä, ö und ü werden Beispielsweise richtig dargestellt" ;

String t = "Das ist MS-Dos Text, denn manche Zeichen werden nicht richtig dargestellt";

erstens: t ist nicht s in einem anderen Zeichensatz!?!

zweitens: s hat keinen Zeichensatz

drittens: wenn du System.out.print(s) machst, dann funzt das möglicherweise nicht, weil die Konsole bescheuerte fonts verwendet

viertens: s ist ein String, in dem nichts besonderes ist

fünstens: wenn der code so wie oben im quelltext steht, dann musst auf deinem Sytem für den java-Compiler etc. auf das Encoding des Java Quelltexts achten (ansonsten \u1234 verwenden)
 

The_S

Top Contributor
@thE_29
Sorry, aber wenn man mir dort nicht helfen kann versuch ichs halt hier! In www.javacore.de ist die Frage auch. Ich würde aber natürlich überall die Lösung posten, sofern eine gefunden wird. Also wo ist das Problem?

@Bleiglanz
- Ich weiß auch das t nicht s in einem anderen Zeichensatz ist! Sollte nur ein schnell dahingeschriebenes Beispiel sein um mein Problem zu verdeutlichen
- s hat keinen Zeichensatz? Check ich net
- Ich mach kein System.out.println
- in s steht ä, ö, ü. Nicht jeder Zeichensatz kommt damit klar
- nein, steht nicht so im Code. Weitere Erläuterung, siehe 1. Antwort

@Stefan1200
Der User gibt den Text ein.

Hat niemand eine Idee?
 

Stefan1200

Top Contributor
Aber wenn der User den Text eingibt, ist doch der Text in Unicode, oder nicht? Oder evtl. in dem Charset, in dem das Programm läuft. Wieso gibt es dann Probleme mit Sonderzeichen? Was machst du denn mit dem String? Wo gibt der User den Text ein? Konsole? Gui?
 

thE_29

Top Contributor
<ot> es ist halt nur bisi Provokant ne andere javaforum seite in der Sig zu haben und dann die gleichen Fragen mehrmals stellen;> </ot>
 

The_S

Top Contributor
User gibt den Text in ner GUI ein. Der Text soll später wieder in einem anderen Zeichensatz angezeigt werden.
 

dotlens

Top Contributor
du hast einen Zeichensatz wenn der User den Text eingibt (Font des JLabels oder was auch immer).
Wenn du das ganze in nem String speicherst besitzt er allerdings diese font nicht mehr.
Wenn du diesen String dann wieder darstellen willst mit einem anderen Zeichensatz musst du einfach die Font der entsprechenden Komptonente (z.b JLabel) ändern.
 

Bleiglanz

Gesperrter Benutzer
Am besten du befasst dich mal etwas mit

Font
Charset
Unicode
Java-Strings

und versuchst dann, dein Problem genauer zu schildern
 

The_S

Top Contributor
Bleiglanz hat gesagt.:
und versuchst dann, dein Problem genauer zu schildern

Was ist daran so schwer zu verstehen? Ich will doch einfach nur von einem Zeichensatz in einen anderen Zeichensatz umwandeln. Die Zeichen, welche in dem neuen Zeichensatz nicht mehr vorhanden sind, sollen durch die dazugehörigen Zeichen des neuen Zeichensatzes ersetzt werden. Zum besseren Verständnis ein Beispiel wo sowas nützlich ist: Ein Javaprogramm soll eine Batch-Datei schreiben, welche ein Programm in einem Verzeichnis öffnet. Sobald jetzt aber ein ä oder ähnliches im Verzeichnisnamen vorkommt habe ich ein Problem, deshalb muss ich den String vorher in den MS-DOS Zeichensatz umwandeln. Ich weiß, dass ich das in diesem Fall mit einem OutputStreamWriter lösen kann, aber wenn ich die Datei vorher ausgeben will (in einem JTextArea) habe ich ein Problem, weil ich nicht weiß, wie ich das bewerkstelligen kann. Jetzt klarer?
 

The_S

Top Contributor
Versteh ich net, warum mir das nicht aufgefallen ist ???:L :oops: . Auf jeden Fall funktioniert es so, wie auf JavaCore beschrieben! Danke!
 

Bleiglanz

Gesperrter Benutzer
mein letztes wort dazu:

Du kannst einen String nicht in einen anderen Zeichensatz konvertieren, weil EIN STRING KEINEN ZEICHENSATZ HAT

Du kannst einen String unter angabe eines ENCODINGS in ein byte[]-Array konvertieren (und zurück)

Code:
public static String convertToUTF8(String s) {
  String out = null;
  try {
    out = new String(s.getBytes("UTF-8"));
  } catch (java.io.UnsupportedEncodingException e) {
    return null;
  }
  return out;
}
auf rechnern, die nicht ISO-8859-1 oder ISO-8859-15 oder UTF-8 als Default-charset verwenden dürfte diese Mehtode ziemlich absurde veränderungen an deinem String vornehmen

Nur weil zufällig UTF-8 bei Codes <255 mit dem ISO-8859-1 übereinstimmt [und dieses wahrscheinlich dein Default charset ist] passiert nix

String(byte[] bytes)
Constructs a new String by decoding the specified array of bytes using the platform's default charset.

getBytes(String charsetName)
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.

aber irgendwie scheint das bei dir nicht anzukommen???
 

The_S

Top Contributor
Bleiglanz hat gesagt.:
auf rechnern, die nicht ISO-8859-1 oder ISO-8859-15 oder UTF-8 als Default-charset verwenden dürfte diese Mehtode ziemlich absurde veränderungen an deinem String vornehmen

Warum das?

Ich weiß nicht, was du an dieser Möglichkeit auszusetzen hast
 

Bleiglanz

Gesperrter Benutzer
kannst du mal ein paar beispiele angeben, bei denen

!s.equals(convertToUTF8(s))

gilt? die methode macht doch gar nichts???????
 

The_S

Top Contributor
Hab den Code nicht übernommen. Hab mir nur das mit den

Code:
string.getBytes("Zeichensatz");

angeschaut, weil ich mehr nicht brauchte. Bei mir sieht das in etwa so aus:

Code:
String str = "äöü+#!2§$§$&%&(&)";
String str2 = "";
try {
	str2 = new String(str.getBytes("EUC-KR"));
}
catch (Exception e) {
}
if (!str.equals(str2)) {
    System.out.println(str + " != " + str2);
}
else {
    System.out.println(str + " == " + str2);
}

is jetzt nur schnell dahingeklatscht (nicht as wieder jemand wegen dem catch mekert :wink: )

[edit] hab meinen Code abgeändert um auf deine Frage zu antworten (sry hab ich total vergessen :bae: :oops: ???:L )[/code]
 

Bleiglanz

Gesperrter Benutzer
Code:
   str2 = new String(str.getBytes("EUC-KR"));
auch diese Zeile ist sinnloser nonsense, weil:

- nicht plattformunabhängig
- bei rechnern mit default EUC-KR: macht sie gar nichts
- bei rechnern mit default != EUC-KR: zerstört sie den String unvorhersehbar
 

The_S

Top Contributor
Bleiglanz hat gesagt.:
nicht plattformunabhängig

Warum?

Bleiglanz hat gesagt.:
bei rechnern mit default EUC-KR: macht sie gar nichts

Soll auch so sein

Bleiglanz hat gesagt.:
bei rechnern mit default != EUC-KR: zerstört sie den String unvorhersehbar

Damit sie für Programme, welche diesen Zeichensatz benutzen lesbar wird.

Ich geb dir mal ein Beispiel: Du willst über Java eine Batch-Datei schreiben, welche einen Ordner beim Klick öffnet. Dieser Ordner heißt "Hörspiel" und liegt in "C:\".

Schreibst du

Code:
String nichtUmgewandelt = "C:\\Hörspiel";
BufferedWriter bw = new BufferedWriter(new FileOutputStream("Erstelle auf den Desktop" + ".bat"));
bw.write(nichtUmgewandelt);

funktioniert das nicht, weil er den Ordner nicht findet (anderer Zeichensatz)

Schreibst du allerdings

Code:
String nichtUmgewandelt = "C:\\Hörspiel";
String umgewandelt = new String(nichtUmgewandelt.getBytes("Cp850");
BufferedWriter bw = new BufferedWriter(new FileOutputStream("Erstelle auf den Desktop" + ".bat"));
bw.write(umgewandelt);

öffnet das Programm den Ordner (Cp850 = Zeichensatz für DOS).
 

Bleiglanz

Gesperrter Benutzer
das ist zufall, du machst es trotzdem völlig falsch, ich hab jetzt fast schon keine Lust mehr dir das zu erklären

du nimmst den String "C:\\Hörspiel"

=> dann besorgst du dir die Bytes, die den String im Encoding Cp850 darstellen (das ist ja noch OK)

=> dann "re-interpretierst" du diese Byte-Folge nochmal im Default-Encoding der VM (machst also einen ganz anderen String daraus - völlig unklar was das soll...)

=> dann schreibst du den Schrott in einen Writer, bei dem du dich ebenfalls auf das Default-Encoding deiner Maschine verlässt (warum schreibst du die ByteFolge nicht gleich in den reinen Stream - das wäre richtig - sondern wickelst nochmal einen Writer drumherum?) und weil da ebenfalls das Default-Encoding verwendet wird, wird die Bytefolge eben richtig reingeschrieben

EXTREM UNDURCHSCHAUBARER SELTSAMER CODE

richtig wäre das Dekorieren mit einem

OutputStreamWriter(OutputStream out, Charset cs)
Create an OutputStreamWriter that uses the given charset.

also etwa
Code:
 String nichtUmgewandelt = "C:\\Hörspiel";
BufferedWriter bw = 
new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("Erstelle auf den Desktop" + ".bat") ,"Cp850"));

oder irgendsowas
 

The_S

Top Contributor
Aaaaaaaaaaaahhhhhhhhhh! Das war doch nur ein Beispiel!!! Das würde ich natürlich mit eine OutputStreamWriter machen! Sollte nur verdeutlichen für was man sowas brauchen kann!
 

Bleiglanz

Gesperrter Benutzer
Code:
String umgewandelt = new String(nichtUmgewandelt.getBytes("Cp850");
"sowas" ist ein Kündigungsgrund
 

The_S

Top Contributor
Dafür bin ich ja Azubi und lerns nur :bae: . Auch wenn du mich dafür vierteilen wirst :wink: . Warum?
 
G

Guest

Gast
Hobbit_Im_Blutrausch hat gesagt.:
Bleiglanz hat gesagt.:
und versuchst dann, dein Problem genauer zu schildern

Was ist daran so schwer zu verstehen? Ich will doch einfach nur von einem Zeichensatz in einen anderen Zeichensatz umwandeln. Die Zeichen, welche in dem neuen Zeichensatz nicht mehr vorhanden sind, sollen durch die dazugehörigen Zeichen des neuen Zeichensatzes ersetzt werden. Zum besseren Verständnis ein Beispiel wo sowas nützlich ist: Ein Javaprogramm soll eine Batch-Datei schreiben, welche ein Programm in einem Verzeichnis öffnet. Sobald jetzt aber ein ä oder ähnliches im Verzeichnisnamen vorkommt habe ich ein Problem, deshalb muss ich den String vorher in den MS-DOS Zeichensatz umwandeln. Ich weiß, dass ich das in diesem Fall mit einem OutputStreamWriter lösen kann, aber wenn ich die Datei vorher ausgeben will (in einem JTextArea) habe ich ein Problem, weil ich nicht weiß, wie ich das bewerkstelligen kann. Jetzt klarer?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
magdaStone Logikproblem Umschalten von booleans in anderer Klasse Allgemeine Java-Themen 7
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
K Input/Output String aus einer Datei einlesen und in anderer Datei speichern Allgemeine Java-Themen 20
J Jar Datei mit anderer .jar einlesen Allgemeine Java-Themen 4
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2
F Eigene .jar mit anderer .jar öffnen Allgemeine Java-Themen 7
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
B Benutzeroberfläche in anderer Klasse aufrufen Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
A Klassen String Array in anderer Klasse verwenden Allgemeine Java-Themen 11
D von einer Klasse auf Komponente in anderer Klasse zugreifen Allgemeine Java-Themen 5
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
M Datumsformat anderer Locales Allgemeine Java-Themen 3
N iText Problem beim verlinken anderer PDFs Allgemeine Java-Themen 2
B Thread beenden (von anderer Klasse) Allgemeine Java-Themen 20
R Java Text anderer Schriftart einlesen Allgemeine Java-Themen 2
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
M Thread aus anderer VM starten bzw. stoppen Allgemeine Java-Themen 7
Q daten propertie datei aus anderer applikation Allgemeine Java-Themen 6
J Zugriff auf Map in anderer Klasse Allgemeine Java-Themen 2
S anderer Mime Type bei xml-Datei Allgemeine Java-Themen 2
G Objekt in anderer Klasse clonen Allgemeine Java-Themen 3
S GetColor? anderer befehl Allgemeine Java-Themen 13
J Ausgewähltes File in anderer Klasse verfügbar machen? Allgemeine Java-Themen 3
T Klasse aus anderer Datei ausführen Allgemeine Java-Themen 9
lin Auf Methode von anderer Klasse zugreifen Allgemeine Java-Themen 5
M Verfügbarkeit von Variablen anderer Klassen Allgemeine Java-Themen 2
J setTitle aus anderer Klasse aufrufen/ändern Allgemeine Java-Themen 4
H textfeldausgabe aus anderer Klasse Allgemeine Java-Themen 4
dereki2000 Eigenen Zeichensatz benutzen Allgemeine Java-Themen 7
S Zeichensatz im Betreff von Mails Allgemeine Java-Themen 7
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
G Random zeichensatz Allgemeine Java-Themen 2
C Verschlüsslung mit festen Zeichensatz Allgemeine Java-Themen 3
H String - Hat welchen Zeichensatz? Allgemeine Java-Themen 6
M Zeichensatz Probleme Allgemeine Java-Themen 4
K Zeichensatz in UTF8 konvertieren Allgemeine Java-Themen 7
D HttpURLConnection - Zeichensatz einstellen? Allgemeine Java-Themen 6
L Türkischer Zeichensatz Allgemeine Java-Themen 4
T Probleme mit dem Zeichensatz Allgemeine Java-Themen 2
B Zeichensatz festlegen Allgemeine Java-Themen 3
thE_29 Kompletten Zeichensatz aendern Allgemeine Java-Themen 8
thE_29 Deutscher Zeichensatz auf englischem Linux. Allgemeine Java-Themen 5
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben