2013-07-28 2 views
7

angeben Oder bin ich fest mit:Gibt es eine Möglichkeit, die Zeichencodierung der java.lang.StringBuilder

String s = new String(new byte[0], Charset.forName("ISO-8859-1")); 
// or ISO_8859_1, or LATIN-1 or ... still no constants for those 
for (String string : strings) { // those are ISO-8959-1 encoded 
    s += string; // hopefully this preserves the encoding (?) 
} 
+1

Text geschrieben oder gelesen Eine Datei oder ein Stream ist das, was spezifisch codiert werden kann. –

Antwort

13

Strings sind immer UTF-16-codiert in Java. Sie sind nur Sequenzen von char Werte, die UTF-16-Code-Einheiten sind. Wenn Sie die Codierung für den String(byte[], String)-Konstruktor angeben, ist es nur sagen, wie Sie die Bytes in Text dekodieren - die Codierung wird anschließend verworfen. Wenn Sie eine Codierung beibehalten müssen, müssen Sie eine eigene Klasse erstellen, um eine Charset und String zusammen zu halten. Ich kann nicht sagen, dass ich das jemals tun wollte - bist du dir wirklich sicher, dass du das tun musst?

(also Ihre „stecken mit“ Code würde sowieso nicht funktionieren - und es wäre auch ineffizient.)

+1

@HovercraftFullOfEels: Das "Dein" war richtig zu Beginn - der Code in der Frage "gehört" zum OP. "Du bist" funktioniert einfach nicht in diesem Zusammenhang. –

+0

"dein" steckte mit "Code würde sowieso nicht funktionieren - und es wäre auch ineffizient" - darum habe ich gesagt - feststecken - danke für die Antwort denke ich jetzt habe ich es verdaut! –

+0

@Mr_and_Mrs_D: "Oder bin ich fest mit" schlägt mir vor, dass Sie Code haben, den Sie nicht mögen, aber würde um das Problem arbeiten - in diesem Fall hätte es * nein * Vorteile. Ich bin froh, dass du es jetzt "verstanden hast" :) –

2

Wie wäre Konverter mit Caching zu verwenden:

public static void main(String args[]) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(1<<10); 
    OutputStreamWriter osw = null; 
    try { 
     osw = new OutputStreamWriter(baos, "UTF-8"); 
    } catch (UnsupportedEncodingException ex) { 
    } 
    osw.write("Привет!"); 
    osw.flush(); 
    System.out.println("Hello: " + baos.toString("UTF-8")); 
} 
Verwandte Themen