我正在构建一个用户必须猜出一个秘密词的应用程序。我在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);
}
否则代码工作正常,除了提到的字符
答案 0 :(得分:3)
很明显,创建InputStreamReader
时生效的默认编码与文件不匹配。
如果您尝试阅读的文件是UTF-8,那么这应该有效:
reader = new BufferedReader(new InputStreamReader(fins, "UTF-8"));
如果文件不是UTF-8,那么这将不起作用。相反,您应该使用文件的真实编码的名称。 (我的猜测是它位于ISO/IEC_8859-1或ISO/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不同。可能你有一些流行的阿尔巴尼亚文本文件编码。检查您的操作系统设置以进行猜测。