2016-04-27 12 views
0

Ich möchte Zeichen (Chinesisch oder andere Sprache) aus Eigenschaftendatei auf Windows-Box anzeigen.java encode String zu UTF

Angenommen, ich lese eine Eigenschaft server.location = System 位置 von der Systemeigenschaft, die beim Starten des Servers festgelegt wird.

ich versuchte, diesen

new String(locationStr.getBytes(System.getProperty("file.encoding")), "UTF-8"); 

Dies funktioniert mit Linux zu tun, aber kann es nicht unter Windows arbeiten bekommen.

Es folgt snipet zusammengefasst, ohne Syntax, wie die Systemeigenschaft

gesetzt
URL fileURL = new URL("file:filePathAndName"); 
InputStream iStream = fileURL.openStream() ; 
Properties prop = new Properties(); 
prop.load(iStream); 
//Enumerate over prop and set System.setProperty (key, value); 

in Reading als System.getProperty ("server.location")

Das zentral für alle Eigenschaftsdateien erfolgt Wenn Sie also etwas während des Lesens oder Festlegens einer bestimmten Codierung ändern, könnte dies andere beeinflussen. Daher ist dies nicht ratsam.

Auch versucht, mit URLEncoder.encode zu kodieren, hat aber nicht geholfen. Ich sehe keinen spezifischen Kodierungssatz. Java verwendet UTF-16, unter Windows lautet die Kodierung "Cp1252". Was fehlt mir hier?

Irgendwelche Hilfe, um diese Arbeit zu machen oder etwas Licht zu werfen, wird geschätzt. Ich habe auch versucht, bestehende Fragen zu beantworten, aber die Antworten haben sich nicht direkt ergeben und haben somit neue Fragen aufgeworfen. Danke

Bearbeiten: Konnte den erhaltenen String nicht in UTF-8 konvertieren. Irgendwie überzeugt Menschen Objekte im Weg zu lesen Joop erwähnt und rufen Sie die Zeichenfolge richtig

+1

Eine Eigenschaftendatei soll in ISO_8859_1 kodiert sein. Was enthält Ihre Datei? –

+0

"UTF-8" in der Eigenschaftendatei klingt confussing? – Priyamal

+0

Hallo JB, nicht sicher, was Sie meinen "Datei sollte in ISO-8859-1 codiert werden" Ich fand in Windows die Standardcodierung ist Cp1252. Die Eigenschaftendatei besteht aus zahlreichen Eigenschaften, eine pro Zeile. zB server.name = someName server.typ = someType server.location = someLocation usw. – Nilesh

Antwort

1

String/char/Reader/Writer in Java enthalten Unicode-Text. Binärdaten, byte[], InputStream/OutputStream müssen mit einer Codierung verknüpft sein, um in Text, String, konvertiert zu werden.

Es scheint, dass Ihre Eigenschaftendatei in UTF-8 ist. Geben Sie dann beim Laden der Eigenschaften eine feste Codierung an.

InputStream iStream = fileURL.openStream(); 
Reader reader = new BufferedReader(new InputStreamReader(iStream, StandardCharsets.UTF_8)); 
Properties prop = new Properties(); 
prop.load(reader); 

Hier überbrückt die Input den Übergang von Binärdaten (Unicode) Text durch eine Umwandlung der Codierung des Inputstream angibt.

+0

Danke Joop für die Antwort, aber wollen wissen, was der Grund dafür sein könnte, die Zeichenfolge in Unicode zu konvertieren. Wie bereits erwähnt, ist das Ändern des Codes zum Lesen und Festlegen der System-Eigenschaft kaum zu erreichen. Daher möchten Sie das Lesen der String-Nachricht aus der Systemeigenschaft interpretieren. – Nilesh

+0

Das Problem liegt also in der Weitergabe der Systemeigenschaft. Verwenden Sie 'java -Dserver.location = ... ...'? Dann sind Sie auf die Betriebssystem-Codierung der Befehlszeile beschränkt. Java erhält möglicherweise einen falschen String-Inhalt, und dann kann es sogar unmöglich sein, es zu korrigieren. –

+0

Nur um einige Informationen hinzuzufügen, wird die Eigenschaft in einer Datei erwähnt, in der viele Schlüsselwertpaare, eins pro Zeile, erwähnt werden. z.B. server.name = somename server.type = stype server.location = someLocation ... Und gelesen von verschiedenen Prozessen, in einem solchen Prozess, ich beabsichtige, die Zeichenfolge – Nilesh

0
Properties prop = new Properties(); 
InputStream input = null; 
String filename = "config.properties"; 
input = ClassName.class.getClassLoader().getResourceAsStream(filename); 

      //loading properties 
      prop.load(input); 

      //getting the properties 
       System.out.println(prop.getProperty("propertyname1")); 
       System.out.println(prop.getProperty("propertyName2")); 
       System.out.println(prop.getProperty("propertyName3")); 

oder Sie können über die proerties aufzählen

Enumeration e = prop.propertyNames(); 

    while (e.hasMoreElements()) { 
     String key = (String) e.nextElement(); 
     System.out.println(key + " -- " + prop.getProperty(key)); 
    } 

dies ist, wie Sie tatsächlich Eigenschaften aus einer Property-Datei erhalten soll und Sie müssen sich nicht um die utf-8 Zeichen kümmern.

+0

Danke Priyamal für die Antwort. Wenn ich den Lesecode ändern könnte, wäre das nützlich gewesen.Aber gibt es eine Möglichkeit, den String von System Property in UTF-8 richtig zu konvertieren – Nilesh