我正在尝试读取一个UTF-8编码的txt文件,该文件有一些土耳其字符。基本上我已经编写了一个基于轴的Web服务,它读取此文件并将输出作为字符串发回。不知怎的,我无法正确阅读这些角色。代码非常简单,如下所述:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
public class TurkishWebService {
public String generateTurkishString() throws IOException {
InputStream isr = this.getClass().getResourceAsStream(
"/" + "turkish.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(isr,
"UTF8"));
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
}
in.close();
return str;
}
public String normalString() {
System.out.println("webService normal text");
return "webService normal text";
}
public static void main(String args[]) throws IOException {
new TurkishWebService().generateTurkishString();
}
}
以下是turkish.txt的内容,只有一行
Assalğçğıİİööşş
我将stdout作为
Assal?τ????÷÷??
请在这里建议我做错了什么。
答案 0 :(得分:5)
确保用于显示输出的控制台也以UTF-8编码。例如,在Eclipse中,您需要转到Run Configuration
> Common
要做到这一点。
答案 1 :(得分:2)
您似乎正确地将文件数据从UTF-8解码为UTF-16字符串。
System.out
执行从UTF-16字符串到default JRE character encoding的转码操作。如果这与接收字符数据的设备使用的编码不匹配,则会损坏。因此,控制台应设置为默认字符编码或发生数据损坏。如何做到这一点取决于设备。
如果您使用的是终端,the Console可以更好地确定设备编码。
注意:最好使用try-with-resources或至少try-finally关闭流;如果可用,请使用the standard encoding constants。
答案 2 :(得分:0)
代码看起来不错。问题应该是无法打印土耳其语的控制台输出。为了确保在程序中进行临时测试:用Assal取出字符串?τ????÷÷??你从文件中读取并执行此操作
System.out.println(str.charAt(6) == 'ğ');