使用unicode字符读取原始文件

时间:2013-01-15 10:00:04

标签: java android android-resources

我在 / 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 s t

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

首先,您需要确定文件/ res / raw

的编码

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

file /res/raw

然后在

中指定正确的编码
inputreader = new InputStreamReader(inputStream, "UTF-8");

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

如果您只想使用InputStreamWriter并使用FileOutputStream并设置正确的编码...它就像魅力一样......

我希望我能提供帮助: - )

答案 3 :(得分:1)

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