Das Lesen von Sach-Datei mit utf-8-Zeichen
Lese ich eine property-Datei, die darin besteht, eine Nachricht in der UTF-8-Zeichensatz.
Problem
Wird die Ausgabe nicht in das entsprechende format. Ich bin mit einem InputStream
.
Die property-Datei sieht wie
username=LBSUSER
password=Lbs@123
url=http://localhost:1010/soapfe/services/MessagingWS
timeout=20000
message=Spanish character are = {á é í, ó,ú ,ü, ñ, ç, å, Á, É, Í, Ó, Ú, Ü, Ñ, Ç, ¿, °, 4° año = cuarto año, €, ¢, £, ¥}
Und ich lese die Datei wie diese,
Properties props = new Properties();
props.load(new FileInputStream("uinsoaptest.properties"));
String username = props.getProperty("username", "test");
String password = props.getProperty("password", "12345");
String url = props.getProperty("url", "12345");
int timeout = Integer.parseInt(props.getProperty("timeout", "8000"));
String messagetext = props.getProperty("message");
System.out.println("This is soap msg : " + messagetext);
Die Ausgabe der obigen Meldung ist
Sehen Sie die Meldung in der Konsole nach der Zeile
{************************ SOAP MESSAGE TEST***********************}
Werde ich verpflichtet, wenn ich keine Hilfe erhalten, das Lesen dieser Datei richtig. Ich lese diese Datei mit einem anderen Ansatz, aber ich bin auf der Suche nach weniger code-änderungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie ein
InputStreamReader
mitProperties.load(Reader reader)
:props.load(propFile)
und es funktioniert gut, aber bei windows musste ich obigen code zum laden der unicode-prop-Datei richtig!FileNotFoundException
. Wo propFileName istconfig/cop-app-dev.properties
InputStream inputStream=getClass().getClassLoader().getResourceAsStream(propFileName)
undproperties.load(inputStream);
FileInputStream
. Laut der docs geworfen wird, , wenn die Datei nicht existiert, wird ein Verzeichnis anstatt einer regulären Datei, oder aus einem anderen Grund nicht geöffnet werden kann zum Lesen. So ist es unmöglich zu sagen, was falsch gelaufen ist mit deinem spezifischen setup (schauen Sie auf die stack-trace, vielleicht gibt es einige weitere details). Aber: Warum nimmst du nicht den stream, den du schon durch den AufrufgetResourceAsStream
? Ersetzen Sie einfach die zweite Zeile ike diese:props.load(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
properties.load(new InputStreamReader(inputStream));
ohneCharset.forName("UTF-8")
. Scheint, wienew InputStreamReader(inputStream));
stellt bereits Daten in UTF-8 und durch hinzufügenCharset.forName("UTF-8")
es bedeutet "transformation", die ist unnötig 🙂Verwenden
props.load(new FileReader("uinsoaptest.properties"))
statt. Standardmäßig verwendet es die CodierungCharset.forName(System.getProperty("file.encoding"))
eingestellt werden kann UTF-8 mitSystem.setProperty("file.encoding", "UTF-8")
oder mit dem Kommandozeilen-parameter-Dfile.encoding=UTF-8
.Sollten Sie die UTF-8-Codierung, wenn Sie bauen Ihre FileInputStream-Objekt. Sie können diesen Konstruktor:
Wenn Sie eine änderung vornehmen möchten, um Ihre JVM so in der Lage sein zu Lesen von UTF-8-Dateien standardmäßig, müssen Sie ändern die JAVA_TOOL_OPTIONS in Ihrer JVM-Optionen, um so etwas wie dieses :
FileInputStream.<init>(String, String)
...FileInputStream.<init>(String, String)
??? Ich verstehe nicht,class FileInputStream
mit Parameter vom TypString
undString