Java正在将我的前导空格改为问号

时间:2016-05-29 16:34:59

标签: java minecraft

我在minecraft mod中使用这个来读写文件并且所有前导空间都被转换为?在文件中。

文件输入样本:

{
   "ReturnToStart": "1b",

归档示例:

{
???"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 个答案:

答案 0 :(得分: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);

好吧,我拿出换行符,垂直制表符和换页符(10,11,12),然后就可以了。

答案 1 :(得分:0)

看起来你在Java 8中使用Nashorn。基本上,这是在Java VM中运行的JavaScript,可以访问所有Java对象。我不认为那些是正常的空间,我怀疑这些是非破坏空间(代码160)。看看data1在这些位置的价值会很有趣。

JavaScript方法String.fromCharCode无法在Nashorn中正确转换UTF-8代码。实际上这将永远不会起作用,因为在UTF-8中,单个字符可以分割为多个字符,而从read返回的值限制为16位。还不够。

以下可能是您需要的。我已经包含但评论了start1变量,因为您可能希望在代码中使用它,但不需要。

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();