我在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();
答案 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();