java - Windows 控制台中的 unicode 字符比预期的多

标签 java windows unicode console

我想在 Windows 控制台中打印俄语和德语字符。 所以我写了一个小测试程序来了解它的工作情况:

PrintStream ps = new PrintStream(System.out, false, "UTF-8");
ps.println("öäüß гджщ");

然后我启动cmd.exe,把它的字体改成支持Unicode的Lucida Console,把code page改成Unicode "chcp 65001",然后执行我的程序。

德文和俄文字符已打印,但文字比我预期的多一点(红色下划线): enter image description here

但是文本在 Eclipse 控制台中打印正确。有没有办法在 Windows 控制台中正确打印它? 我使用 Windows 7。

我刚刚用 JNI 解决了这个问题,但它是否可以用纯 java 实现仍然很有趣。

最佳答案

每次打开或写入文件时,都会应用特定的编码。但有时我们会忘记我们的 IDE(在您的情况下是 Eclipse)也有编码。

当您在引号之间键入特定文本时,它会以特定编码显示和键入,即您的 IDE 的编码。 您的假设是输出流 (UTF-8) 的编码也将保证文本以该特定编码显示。但是,我认为这里也再次应用了您的 IDE 的编码。

我建议仔细检查您的 eclipse 编码。也许这可以解决您的问题。当然值得一试,不是吗? :)

对于全局编码设置,将以下代码添加到 eclipse.ini 文件

-Dfile.encoding=UTF-8 

编辑:

我只想补充以下内容。我执行了以下步骤作为实验。

  1. 我打开了 Notepad++ 并创建了一个新文件
  2. 我修改编码设置为UTF-8
  3. 我复制了您的俄语文本并将其粘贴到我的新文本文件中并保存了。
  4. 接下来我打开我的 Windows 控制台(“cmd”)
  5. 我执行了“chcp 65001”命令。
  6. 接下来我在我的控制台中打印文件的内容:“type file.txt”
  7. 一切都正确显示。

这并不能证实太多,但它确实证实了一个事实,即如果以正确的编码预见到内容,DOS 可以完成这项工作。

编辑 2:

@ka3ak 已经 2 年多了,但在阅读一本关于 Java I/O 的书时,我偶然发现了以下内容。

System.console().printf(...) has better support for special characters than the System.out.println(...) method.

因为 PrintStream 只是环绕 System.out 流,我猜你也有同样的限制。我想知道这是否可以解决问题。如果它仍然重要,请试一试。 :)

stackoverflow 上的其他帖子报告了类似的事情:console.writeline and System.out.println

关于java - Windows 控制台中的 unicode 字符比预期的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744076/

相关文章:

java - 如何在 Maven 中隐藏编译的间接依赖?

java - 在 Apache Camel 中使用 session 和 Cookie

windows - 在 Win7 登录屏幕上运行应用程序

windows - COM dll 不再注册

c - Windows 中的内存分配限制 + 我是否正确计算?

java - Maven + Robolectric,找不到资源?

java - 有什么方法可以使用自定义 BeanWrapper 实现来加载应用程序上下文

java - 如何在java中使用高阶unicode字符?

c++ - 将 unicode(带 BOM)字符串转换为 ASCII std::string

javascript - 这个 JavaScript 代码片段似乎没有去除 JavaScript 中的 Unicode 转义字符 - 为什么?