当前位置: 首页 > 面试题库 >

Java不显示UTF-8 CJK字符

柴嘉石
2023-03-14
问题内容

我已经阅读了一段时间的Unicode和UTF-8编码,并且我想我理解了,所以希望这不会是一个愚蠢的问题:

我有一个文件,其中包含一些CJK字符,并且已另存为UTF-8。我安装了各种亚洲语言包,并且其他应用程序可以正确显示这些字符,因此我知道可以做很多工作。

在我的Java应用程序中,我读取文件的方式如下:

// Create objects
fis = new FileInputStream(new File("xyz.sgf"));
InputStreamReader is = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(is);

// Read and display file contents
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
    sb.append(line);
}
System.out.println(sb);

输出将CJK字符显示为’???’。进行呼叫以is.getEncoding()确认它肯定是在使用UTF-8。我缺少什么步骤才能使字符正确显示?如果有所不同,我正在使用Eclipse控制台查看输出。


问题答案:
System.out.println(sb);

问题是上面的线。这将使用默认系统编码对字符数据进行编码,并将数据发送到STDOUT。在许多系统上,这是一个有损过程。

如果更改默认值,System.out则控制台使用的编码和控制台使用的编码必须匹配。

更改默认系统编码的唯一受支持机制是通过操作系统。
_(有些人建议使用file.encodingsystem属性,但不建议这样做,并且可能会有意想不到的副作用。)_您可以将setOut用作自己的自定义PrintStream

PrintStream stdout = new PrintStream(System.out, autoFlush, encoding);

您可以通过Run配置更改Eclipse控制台编码。

通过我的个人资料,您可以在我的博客上找到许多有关该主题的文章。



 类似资料:
  • 问题内容: 我的数据库已正确设置为UTF-8,并且正在处理包含日语字符的数据库。如果我从mysql命令行执行SELECT * …,我会正确看到日语字符。当将数据从数据库中拉出并显示在网页上时,我可以正确地看到它。 但是,在phpMyAdmin中查看表数据时,我只会看到垃圾文本。即。 ç§ã日本料ç†ãŒå¥½ããããã㥥œœ¬æ–™ç†ã… 如何获取phpMyAdmin以日语显示字

  • 当我从文件导入字体时,它显示得很奇怪。它应该说“测试”,但它只是说“_”。 这是我的代码:

  • 问题内容: 我在win7(x64)上安装了标准XAMPP。在过去的项目中遇到了编码方面的麻烦,其中mysql编码与php enconding不匹配,而php enconding有时又以其他编码形式输出html,因此,我决定始终使用utf-8对所有内容进行编码。 我刚刚开始使用html标记,并且已经遇到了麻烦。 我的页面是使用utf-8保存的( 我认为 没有BOM ) // update:事实并非如

  • 我正在尝试使用raylib显示包含西里尔字符的字符串。所以我加载了一个代码点如下的字体: 如果我画

  • 使用iText 5.5.11从maven回购https://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.11 基本多语言平面中的非代理字符在生成的pdf上呈现,但代理字符不呈现。 编辑:也尝试使用编码为“UniGB-UCS2-H”的字体“STSong Light”(如本书中的示例)。结果相同-缺少代理字符。 Edit2:让它与"SimS