下面你可以看到我的代码;
final BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(f),"UTF-8"));// tried also "iso-8859-9"
String strLine;
while ((strLine = br.readLine()) != null) {
total += "\n" + strLine;
}
br.close();
下面是输出。该怎么办呢?
insan�n sec�ld�g� combobox
3条答案
按热度按时间ffx8fchx1#
或U+FFFD字符是Unicode定义为“替换字符”的特殊字符,当遇到无法识别的字符或字节数据格式不正确且无法读取字符时显示的字符。
您使用的
InputStreamReader
构造函数不允许您指定数据格式不正确或字符无法识别时的行为。它假定您希望在存在无法识别的字符或字节数据格式不正确时使用“替换字符”的默认行为,因此这可能就是您所看到的。如果您检查输出并发现土耳其字符不存在,但已被“替换字符”U+FFFD替换,则可以更改行为以抛出异常而不是使用替换字符-实际异常将更容易检测数据是否在错误的字符集中。
要指定这种不同的行为,请使用此版本的
InputStreamReader
对于
CharsetDecoder
,传入其中
charset
是您选择的字符集,例如StandardCharsets.UTF_8
这将导致引发异常,而不是插入替换字符。
如果仍然看到替换字符并且没有抛出异常,那么很明显问题出在如何查看输出上。
6jjcrrmo2#
那么实际的文件编码是什么呢?打开一个十六进制编辑器,查看
insan�n
的字节值(特别是断开的字符)。然后当你有字节值时,你就可以找到实际的编码。现在你随机尝试了两个错误的编码。kmb7vmvb3#
Cp1254编码是您正在寻找的编码特殊土耳其字符。