我使用libGDX为Android平台开发游戏。在我的游戏中,我将不得不解析一些包含一些设置的文件(皮肤自定义,用户地图阅读器)。
我目前的代码至少适用于两种编码:utf-8和iso-8859-1但是当我解析一个utf-16LE编码文件时,每个字符之间还有一个额外的空格(当我使用System时.out.println())
当我使用libGDX时,我正在使用FileHandle类(> FileHandle doc)。我使用.reader(int buffersize)方法获取BufferedReader,并使用其.readLine()方法。
这是我的测试代码:
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import java.io.BufferedReader;
public class TestFileReader {
private FileHandle skinFile; // libgdx File like object
private BufferedReader bR; // read character-typed files
private String line; // for printing each line
private Boolean loop;
public TestFileReader() {
System.out.println("=== Test started ===");
skinFile = Gdx.files.internal("skin_UTF-8.ini");
readFile(skinFile);
skinFile = Gdx.files.internal("skin_UTF-16LE.ini");
readFile(skinFile);
System.out.println("=== Test finished ===");
Gdx.app.exit();
}
private void readFile(FileHandle skinFile) {
try {
bR = skinFile.reader(1024); // 1024 is arbitrary
}
catch(Exception e) {
showError("Error (" + e + ")");
}
loop = true;
System.out.println("--- read started ---");
while(loop) {
try {
line = bR.readLine();
}
catch(Exception e) {
showError("Unable to read the next line (" + e + ")");
}
if(line == null) {
// read finished
loop = false;
}
else {
// parsing
line.trim();
System.out.println("[" + line + "]");
}
}
System.out.println("--- read finished ---");
}
private void showError(String error) {
System.out.println("[Parser] " + error);
Gdx.app.exit();
}
}
我的两个文件包含:
This
is
a
test
H3ll0
WORLD
&é"'(§è!çà)-
àà`zè`r´róíú
执行将打印出来(并且不能复制/粘贴,我认为在某处有一个空字节):
我希望能够读取所有具有未知编码的文件(至少是主要文件)。我做错了什么? (我是libGDX和Java的初学者)