2017-09-22 3 views
2

Ich speicherte meine Java-Quelldatei mit Angabe seiner Codierung als UTF-8 in meiner Eclipse. Es funktioniert gut in Eclipse. Wenn ich einen Build mit Maven erstellen & führen Sie es in meinem System Unicode-Zeichen funktionieren nicht."UTF-8" Codierung funktioniert nicht in Java Build

Dies ist mein Code:

byte[] bytes = new byte[dataLength]; 
    buffer.readBytes(bytes); 
    String s = new String(bytes, Charset.forName("UTF-8")); 
    System.out.println(s); 

enter image description here

Eclipse-Konsole & Windows-Konsole Screenshot angebracht. Erwartung der Eclipse-Ausgabe in anderen Systemen (Windows-Eingabeaufforderung, Powershell-Fenster, Linux-Maschine usw.).

+0

Welchen Wert hat die Systemeigenschaft 'file.encoding' in der Konsole? Wie liest du die Daten, wie druckst du? Zeigen Sie etwas Code. –

+0

Wahrscheinlich ist Ihre PowerShell-Codierung nicht UTF-8. Versuchen Sie, seine Codierung als UTF-8 zu setzen: Führen Sie den Befehl '[Console] :: OutputEncoding = [Text.UTF8Encoding] :: UTF8' aus und führen Sie dann Ihr Java-Programm aus. –

+0

Es ist das maven-compiler-plugin, das auch die zu kompilierende Codierung kennen muss. Dies ist eine Pom-Einstellung. Fehler in der Konsole können nicht als echte Fehler betrachtet werden, da es in der Regel einen anderen Plattformcodierungssatz gibt. –

Antwort

-1

Sie konnten die Console Klasse für that.The folgenden Code verwenden, können Sie einige Anregungen geben:

public class Foo { 

    public static void main(String[] args) throws IOException { 
     String s = "öäü"; 
     write(s); 
    } 

    private static void write(String s) throws IOException { 
     String encoding = new OutputStreamWriter(System.out).getEncoding(); 
     Console console = System.console(); 
     if (console != null) { 
      // if there is a console attached to the jvm, use it. 
      System.out.println("Using encoding " + encoding + " (Console)"); 
      try (PrintWriter writer = console.writer()) { 
       writer.write(s); 
       writer.flush(); 
      } 
     } else { 
      // fall back to "normal" system out 
      System.out.println("Using encoding " + encoding + " (System out)"); 
      System.out.print(s); 
     } 
    } 
} 

Getestet unter Windows 10 (poowershell), Ubuntu 16.04 (bash) mit den Standardeinstellungen. Funktioniert auch von IntelliJ (Windows und Linux).

+0

Ich habe Ihren Code ausprobiert. Funktioniert immer noch nicht. – Prasath

+0

Mhh seltsam, es funktioniert auf meiner Seite, nur doppelt überprüft. Können Sie ein laufendes Beispiel dort posten, wo es nicht funktioniert? –

+0

Diese Frage ist geschlossen. Problem ist in Power Shell-Fensterausführung. Ich habe die Lösung gefunden. – Prasath

-1

Von dem, was ich sagen kann, haben Sie entweder das falsche Zeichen, was ich nicht denke, ist der Fall, oder Sie versuchen, es auf einem Terminal anzuzeigen, das das Zeichen nicht behandelt. Ich habe einen kurzen Test geschrieben, um die Probleme zu trennen.

public static void main(String[] args){ 
    String testA = "ֆޘᜅᾮ"; 
    String testB = "\u0586\u0798\u1705\u1FAE"; 

    System.out.println(testA.equals(testB)); 
    System.out.println(testA); 
    System.out.println(testB); 

    try(BufferedWriter check = Files.newBufferedWriter(
      Paths.get("uni-test.txt"), 
      StandardCharsets.UTF_8, 
      StandardOpenOption.CREATE, 
      StandardOpenOption.TRUNCATE_EXISTING)){ 
     check.write(testA); 
     check.write("\n"); 
     check.write(testB); 
     check.close(); 
    } catch(IOException ioc){ 

    } 

} 

Sie könnten die Werte mit den Zeichen, die Sie wollen ersetzen.

Die erste Zeile sollte True ausgeben, wenn die Zeichenfolge die tatsächliche Zeichenfolge ist, die Sie möchten. Danach geht es um die Darstellung der Charaktere. Zum Beispiel, wenn ich die Textdatei mit less öffne, dann ist die Hälfte von ihnen gebrochen. Wenn ich es mit Firefox öffne, sehe ich alle vier Zeichen, aber einige sind wackelig. Sie benötigen eine Schriftart mit Zeichen für den entsprechenden Unicode-Wert.

Eine Sache, die Sie tun können, ist, öffnen Sie die Datei in einem Textverarbeitungsprogramm und wählen Sie eine Schriftart, die die Zeichen anzeigt, die Sie richtig wollen.

Wie vom OP vorgeschlagen, bewirkt die Eingabe der -Dfile.encoding=UTF8, dass die Zeichen korrekt angezeigt werden, wenn System.out.println verwendet wird. Ähnlich wie this question, die die Codierung von System.out ändert.