gpt4 book ai didi

Java InputStreamReader 无法读取特殊(土耳其语)字符

转载 作者:行者123 更新时间:2023-12-01 10:02:14 24 4
gpt4 key购买 nike

下面你可以看到我的代码;

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�组合框

最佳答案

� 或 U+FFFD 字符是 Unicode 定义的特殊字符,称为“替换字符”,当遇到不认识的字符或字节数据格式错误且无法替换字符时显示的字符。阅读。

您使用的 InputStreamReader 构造函数不允许您指定存在格式错误的数据或无法识别字符时的行为。它假设您希望在存在无法识别的字符或字节数据格式错误时使用“替换字符”的默认行为,因此这可能就是您所看到的。

如果您检查输出并发现土耳其语字符不存在,而是被“替换字符”U+FFFD 替换,您可以更改行为以引发异常,而不是使用替换字符——一个实际的替换字符。异常将使更容易检测数据何时使用错误的字符集。

要指定这种不同的行为,请使用此版本的InputStreamReader

public InputStreamReader(InputStream in, CharsetDecoder dec)

对于CharsetDecoder,传入

charset.newDecoder().onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT)

其中 charset 是您选择的字符集,例如StandardCharsets.UTF_8

这将导致抛出异常,而不是插入替换字符。

如果您仍然看到替换字符并且没​​有抛出异常,则很明显问题出在您查看输出的方式上。

关于Java InputStreamReader 无法读取特殊(土耳其语)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36709618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com