1

我在/res/raw (R.raw.test) 文件夹中有一个文件,其内容如下:

这是一个 Tésêt

我想把它读成一个字符串。我目前的代码是:

public static String readRawTextFile(Context ctx, int resId) {
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    InputStreamReader inputreader;
    try {
        inputreader = new InputStreamReader(inputStream, "UTF-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
        return null;
    }
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();

    try {
        while ((line = buffreader.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
    } catch (IOException e) {
        return null;
    }
    return text.toString();
}

但是返回的字符串是:

这是一个T�t

我该如何解决这个问题?谢谢

4

4 回答 4

2

您的代码似乎没问题。返回的字符串也可以,只是您尝试在不支持的查看器中查看它UTF-8。我已经运行了您的代码,groovyConsole它可以识别 UNICODE 并且它UTF-8完美地显示了字符串。

于 2013-01-15T10:04:52.740 回答
1

首先需要确定文件/res/raw的编码

如果在 UNIX 上,您可以键入以下命令

file /res/raw

然后在中指定正确的编码

inputreader = new InputStreamReader(inputStream, "UTF-8");
于 2013-01-15T10:09:09.933 回答
1

嗨,我会尝试这样的事情:

StringBuilder str = new StringBuilder();
File file = new File("c:\\some_file.txt");
FileInputStream is = new FileInputStream(file);
Reader reader = new InputStreamReader(is, "UTF-8");
while(true){
    int ch = reader.read();
    if(ch < 0){
      break;
    }
    str.append((char)ch);
}
String myString = str.toString();

如果你想写只是使用InputStreamWriterFileOutputStream设置正确的编码......它就像魅力......

我希望我能帮忙:-)

于 2013-01-15T10:19:42.733 回答
1

我有一个文件,它也给了我一个类似于“这是一个 T�s�t”的输出,对我来说,将 charsetName 设置为 UTF-16 就可以了

于 2015-01-13T13:02:16.123 回答