为什么不使用inputStream读取外来字符?

时间:2011-06-04 17:14:18

标签: android resources inputstream stringtokenizer

我有一个文本文件,其中包含我需要预加载到SQLite数据库中的数据。我在res / raw中保存了。

我使用readTxtFromRaw()读取整个文件,然后使用StringTokenizer类逐行处理文件。

String返回的readTxtFromRaw不会显示文件中的外来字符。我需要这些,因为一些文本是西班牙语或法语。我错过了什么吗?

代码:

String fileCont = new String(readTxtFromRaw(R.raw.wordstext));
StringTokenizer myToken = new StringTokenizer(fileCont , "\t\n\r\f");

readTxtFromRaw方法是:

private String readTxtFromRaw(Integer rawResource) throws IOException
{
    InputStream inputStream = mCtx.getResources().openRawResource(rawResource);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i = inputStream.read();
    while (i != -1)
    {
        byteArrayOutputStream.write(i);
        i = inputStream.read();
    }
    inputStream.close();

    return byteArrayOutputStream.toString();
}

该文件是使用Eclipse创建的,所有字符在Eclipse中都很正常。

这可能与Eclipse本身有关吗?我设置了一个断点并在Watch窗口中检出了myToken。我试图手动替换正确的一个奇怪的角色(例如í,或é),它不会让我。

1 个答案:

答案 0 :(得分:1)

你检查了几种编码吗?

  • 源文件的编码是什么?
  • 输出流的编码是什么?

byteArrayOutputStream.toString()根据平台的默认字符编码进行转换。所以我想它会剥离外来字符或者以它们未在输出中显示的方式转换它们。

您是否已尝试使用byteArrayOutputStream.toString(String enc)?尝试使用“UTF-8”或“iso-8859-1”或“UTF-16”进行编码。