2016-05-29 9 views
-2

Ich benutze dies innerhalb eines Minecraft Mod zu lesen und zu schreiben Datei und alle führenden Raum werden konvertiert werden? in der Datei.Java ändert meine führenden Leerzeichen zu Fragezeichen

Datei-Eingabe Beispiel:

{ 
   "ReturnToStart": "1b", 

Datei aus Put-Beispiel:

{ 
???"ReturnToStart": "1b", 
//xxxxxxxxxxxxxxxxxxxxxxx 
var ips = new java.io.FileInputStream("ABC.json"); 
var fileReader = new java.io.InputStreamReader(ips,"UTF-8"); 
var data1 = fileReader.read(); 
var data; 
var start1 = ""; 
while(data1 != -1) {  
data = String.fromCharCode(data1); 
start1 = start1+data; 
data1 = fileReader.read(); 
} 
fileReader.close(); 
var fileWriter = new java.io.FileWriter("J_out2.txt"); 
fileWriter.write(start1); 
fileWriter.close(); 
+2

Sie kombinieren Java und JavaScript. Sie sind 2 verschiedene Sprachen. Es wird Fehler geben, dann setzen Sie sie zusammen –

+0

Es gibt keine Fehler -es kann lesen und schreiben gut, nur diese seltsamen Zeichen am Anfang jeder Zeile - ich denke, es hat etwas mit den Wagenrücklauf zu tun. – TAP

Antwort

0

Es sieht so aus, als ob Sie Nashorn in Java 8 verwenden. Grundsätzlich läuft JavaScript in einer Java VM mit Zugriff auf alle Java-Objekte. Ich glaube nicht, dass das normale Räume sind, und ich vermute, das sind nicht brechende Räume (mit Code 160). Es wäre interessant zu sehen, was der Wert von data1 an diesen Positionen ist.

Die JavaScript-Methode String.fromCharCode konvertiert UTF-8-Codes in Nashorn nicht ordnungsgemäß. Eigentlich wird das nie funktionieren, weil in UTF-8 ein einzelnes Zeichen auf mehrere Zeichen aufgeteilt werden kann und der Wert, der von read zurückkommt, auf 16 Bit beschränkt ist. Nicht genug.

Unten ist wahrscheinlich, was Sie brauchen. Ich habe die Variable start1 eingefügt, aber kommentiert, weil Sie diese in Ihrem Code verwenden möchten, aber nicht benötigt wird.

var fileReader = new java.io.InputStreamReader(
    new java.io.FileInputStream("ABC.json"), "UTF-8"); 
var bufferedReader = new java.io.BufferedReader(fileReader); 
var fileWriter = new java.io.OutputStreamWriter(
    new java.io.FileOutputStream("J_out2.txt"),"UTF-8"); 
var line; 
// var start1=new java.lang.StringBuilder(); 
while(line=bufferedReader.readLine()) { 
    // start1.append(line); 
    // start1.append('\n'); 

    fileWriter.write(line); 
    fileWriter.write('\n'); 
} 
fileWriter.close(); 
bufferedReader.close(); 
0

var ips = new java.io.FileReader("ABC.json"); 
 
var data1 = ips.read(); 
 
var data; 
 
var start1 = ""; 
 
while(data1 != -1) {  
 
data = String.fromCharCode(data1); 
 

 
if (data1 ==11 ||data1 ==12 || data1 ==10) { 
 
data1 = ips.read(); 
 
continue; 
 
} 
 
//npc.say(data1+" "+ data); 
 
data = String.fromCharCode(data1); 
 
start1 = start1+data; 
 
data1 = ips.read(); 
 
} 
 
ips.close(); 
 
npc.say(start1);

Nun nahm ich Zeilenvorschub, vertikale Registerkarte und Form Feed (10,11,12) und es funktioniert.