gpt4 book ai didi

java - unicode 输出 java windows cmd

转载 作者:行者123 更新时间:2023-11-29 04:22:14 26 4
gpt4 key购买 nike

我是java新手,所以请原谅我,如果这是常见的知识,但我已经努力搜索,但找不到任何有用的、相关的或可理解的东西(考虑到我是一个C开发人员,这很奇怪!)。我的问题是“如何让java在Windows shell中打印Unicode字符串?”。为简单起见,假设我有另一种语言的 hello world 代码(例如:“Săram”),并且我想在 shell 中显示它(实际上我也想获得 Unicode,但首先我必须弄清楚这个)。这在 Intellij IDEA 中完美运行,无需任何额外的代码行!

System.out.println("سلام");

但在 shell 中不起作用。

我非常失望,我从 C 迁移只是为了更好地处理 Unicode!

最佳答案

我在 Windows 10 上使用了 Intellij IDEA/Java 1.8,并以一种有点杂乱的方式尝试了很多东西,但它几乎可以工作了。首先,这是代码:

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class Java901App {
public static void main(String[] args) {
//System.out.println("Hello world!");
//System.out.println("سلام");
try{
PrintStream outStream = new PrintStream(System.out, true, "UTF-8");
outStream.println("Hello world!");
outStream.println("سلام");
} catch(UnsupportedEncodingException e){
System.out.println("Caught exception: " + e.getMessage());
}
}
}
  • 请注意,PrintStream 的编码设置为 UTF-8。请参阅本文所选答案:Chinese Characters Displayed as Questions Marks in Mac Terminal

  • 我根据 Microsoft 的这篇文章向 Windows 添加了 阿拉伯文字补充字体: Why does some text display with square boxes in some apps on Windows 10?我不确定这是否必要,但它肯定没有什么害处。 我卸载了阿拉伯脚本补充字体并且没有任何改变,所以这一步不是必要的。

    <
  • 在从控制台运行应用程序之前,我调用了 chcp 65001。即使 PrintStream 被定义为使用 UTF-8,这绝对是必要的,如下面的屏幕截图所示。

  • 我尝试为命令提示符窗口设置不同的字体,方法是单击窗口左上角的图标,从下拉菜单中选择默认值,然后单击字体 选项卡。有些有效(例如 Consolas),有些无效(例如 MS Gothic)。请注意 super 用户帖子中的评论:In order for chcp 65001 to work, you must be using a TrueType font in the command prompt

  • 以下是一些示例输出: RenderingUTF8

  • 所以它正在工作,只是您提供的文本中的字符以相反的顺序呈现。有谁知道如何解决这个问题,大概是通过在 Java 源代码中指定文本适用于从右到左的语言?


更新:

我修改了代码,以便在命令提示符窗口中正确呈现波斯语文本,但副作用是当代码在 IDE 中运行时它不再正确呈现。这是修改后的代码:

public static void main(String[] args) {
try{
StringBuilder persianHello = new StringBuilder("سلام");
PrintStream outStream = new PrintStream(System.out, true, "UTF-8");
outStream.println("Hello world!");
outStream.println(persianHello); // Renders backwards in console, but correctly in the IDE.
byte directionality = Character.getDirectionality(persianHello.charAt(0));
if (directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC) {
outStream.println("Reversed string:" + persianHello.reverse()); // Renders correctly in console, but backwards in the IDE...
}
} catch(UnsupportedEncodingException e){
System.out.println("Caught exception: " + e.getMessage());
}
}

这是使用该代码的命令提示符输出:

ReversedPersian

此修复是一个 hack;真正需要的是无论是从 IDE 还是从命令提示符运行的代码都能正确运行。

关于java - unicode 输出 java windows cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48402025/

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