从文件中读取非英语语言字符时出错

时间:2012-12-02 14:42:57

标签: java

我正在构建一个用户必须猜出一个秘密词的应用程序。我在assets文件夹中有* .txt文件。问题是单词是阿尔巴尼亚语语言。我们的语言使用“ë”和“ç”之类的字母,因此每当我尝试从文件中读取包含任何这些字符的单词时,我会得到一些邪恶的符号,而我无法为这些字符实现string.compare()。我已尝试过UTF-8的许多选项,更改了Eclipse设置但仍然出现同样的错误。

如果有人有任何建议,我真的很感激。

我用来读取文件的代码是:

AssetManager am = getAssets();
strOpenFile = "fjalet.txt";

InputStream fins = am.open(strOpenFile);

reader = new BufferedReader(new InputStreamReader(fins));

ArrayList<String> stringList = new ArrayList<String>();

while ((aDataRow = reader.readLine()) != null) {
    aBuffer += aDataRow + "\n";
    stringList.add(aDataRow);           
}

否则代码工作正常,除了提到的字符

3 个答案:

答案 0 :(得分:3)

很明显,创建InputStreamReader时生效的默认编码与文件不匹配。

如果您尝试阅读的文件是UTF-8,那么这应该有效:

reader = new BufferedReader(new InputStreamReader(fins, "UTF-8"));

如果文件不是UTF-8,那么这将不起作用。相反,您应该使用文件的真实编码的名称。 (我的猜测是它位于ISO/IEC_8859-1ISO/IEC_8859-16。)


一旦你弄明白文件的编码究竟是什么,你需要尝试理解为什么它与你的Java平台的默认编码不对应......然后就如何处理它做出务实的决定。 (您是否应该将编码硬连接到您的应用程序中......如上所述?您应该将其设置为配置属性还是命令参数?您应该更改默认编码吗?您应该更改文件吗?)

答案 1 :(得分:1)

您需要确定创建文件时使用的字符编码,并在读取时指定此编码。例如,如果是UTF-8,请使用

reader = new BufferedReader(new InputStreamReader(fins, "UTF-8"));

reader = new BufferedReader(new InputStreamReader(fins, StandardCharsets.UTF_8));

如果您使用Java 7。

像Notepad ++这样的文本编辑器有很好的启发式来猜测文件的编码是什么。尝试用这样的编辑器打开它,看看它猜到了哪种编码(如果字符正确显示)。

答案 2 :(得分:1)

您应该知道文件的编码。

InputStream类读取文件二进制文件。虽然你可以将输入作为字符进行插入,但它将是隐式猜测,这可能是错误的。

InputStreamReader类将二进制转换为字符。但它应该知道字符集。

您应该使用the following version按字符集提供。

<强>更新

不建议您使用UTF-8编码的文件,这可能是错误的。在俄罗斯,我们有像CP866,WIN1251和KOI8这样的编码,它们都与UTF8不同。可能你有一些流行的阿尔巴尼亚文本文件编码。检查您的操作系统设置以进行猜测。