繁体   English   中英

读取编码未知的文件

[英]Reading a file with unknown encoding

我使用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的初学者)

utf16文件中打印的前两个字符是BOM 使用它,您可以决定使用哪种编码(缺少哪种编码可能表示与UTF8兼容的编码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM