如何用土耳其语字符号读取java中的UTF 8编码文件

我试图读取一个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?τ????÷÷?? 

请在这里建议我做错了什么。

您似乎正在将文件数据从UTF-8正确解码为UTF-16字符串。

System.out执行从UTF-16字符串到默认JRE字符编码的转码操作。 如果这不匹配,则接收字符数据的设备使用的编码会被破坏。 因此,控制台应设置为默认字符编码或发生数据损坏。 如何做到这一点取决于设备。

如果您使用的是终端, 则控制台可以更好地确定设备编码。

注意:最好使用try-with-resources或至少try-finally来关闭流; 使用标准编码常量(如果可用)。

确保用于显示输出的控制台也以UTF-8编码。 例如,在Eclipse中,您需要转到Run Configuration > Common来执行此操作。

在此处输入图像描述

代码看起来不错。 问题应该是无法打印土耳其语的控制台输出。 为了确保在程序中进行临时测试:用Assal取字符串?τ????÷÷?? 你从文件中读取并执行此操作

  System.out.println(str.charAt(6) == 'ğ');