Java中System.out输出的Unicode格式化

4

我目前正在使用Java开发一个基于文本的游戏,该游戏在命令行解释器中运行。

问题是,我想在命令行中输出德语umlauts(如ü ö ä ß),但这在Windows系统中默认不支持。然而,我找到了一种方法来实现这个功能:

  • 我将代码页更改为65001(使用chcp 65001
  • 我将字体更改为Console Lucida
  • 我使用带有UTF-8编码的PrintStream在命令行中打印(在Java程序中)。

这样做后,在命令行中输出UTF-8字符就可以正常工作了。但这并不是每台电脑的默认设置。

因此,我想创建一个批处理文件来启动游戏,该文件执行基本设置以启用UTF-8输出。更改代码页并使用UTF-8 PrintStream没有问题,但更改字体有点棘手。

这种字体应该安装在自Windows XP SP2以来的所有Windows上,因此这不应该是个问题。另外,您可以通过更改注册表项来更改字体,但这需要一些权限,这不是一个选项。

我搜索了一下,但没有找到任何font命令。有没有解决更改控制台字体的方法?


很抱歉,我不是回答问题而是提出我的问题。但是你是如何改变代码页的呢?我个人认为Windows命令提示符不支持Unicode。 - AlexR
我也是。我把它添加到帖子中了。 - Lukas Knuth
我建议您检查jscript/vbscript来执行此配置。这些都是几乎完全功能的编程语言,可以调用ActiveX和WMI API。您可以使用命令cscript或wscript运行这些脚本。 - AlexR
在这种情况下你什么也做不了。你不能违反操作系统的权限。为什么你要开发文本模式的应用程序?来写GUI吧!但是,如果这是一份作业或者类似的东西,并且脚本宿主+访问注册表被禁用了,那就使用“自己的”基于Java的命令提示窗口。我相信通过谷歌搜索可以给你提供很多链接。如果没有,请实现你自己简单的命令提示符。这很容易。然后将你的应用程序运行到你自己的命令提示符中。 - AlexR
这不是作业,而是一个学校项目。编码部分与项目无关,但在控制台上使用UTF-8会很好。我只是在寻找一种简单的方法来设置控制台字体。 - Lukas Knuth
显示剩余2条评论
1个回答

2
“我进行了一些实验,您可以在不使用任何脚本和JNI的情况下实现这一点:通过创建到cmd.exe的链接并编辑该链接的属性,可以选择Lucida。

我打开了链接以查看其中选择的Lucide Console。真正有趣的是,在链接内部编码了cmd.exe的绝对路径(在我的系统上为D:\Win...),然后我将链接复制到另一台计算机上,看看它是否也能神奇地在那里工作(该计算机上的Windows位于C驱动器上),它确实可以:Windows会为您修复cmd.exe的绝对路径,并且在该计算机上打开的控制台也设置为Lucida。

现在,您只需要在该控制台中打开您的程序(并使其在该控制台中打印)就需要一个批处理文件,其中包含链接文件的名称(以.lnk结尾,在大多数系统上都是隐藏的),后跟您的程序名称,如下所示:


c.lnk t.exe

"由于你正在使用Java,我猜你需要编写类似以下的代码:"
c.lnk java sth.jar

我创建了一个最小示例,你可以在这里找到它:

http://www.mediafire.com/?1yn40gsed3isjut

它包含:
  • 一个最小的t.exe,只弹出一个MessageBox(如果你不信任t.exe,只需在记事本或pedump中打开它,并查看它是否只调用了MessageBox,没有其他api函数)

  • 链接c.lnk到cmd.exe,配置使用Lucida字体,(绝对路径将在运行时由Windows固定)

  • 调用t.exe的.bat文件通过c.lnk


提前感谢,我希望这个程序在每台电脑上都能正常运行,我这里只有两台电脑。 - Bernd Elkemann
由于某些原因,这对我不起作用。当我执行批处理时,只有内容被回显。我尝试了不同的编码,但似乎在这里不起作用。 - Lukas Knuth
那你把 .bat 文件改成了什么样子?类似于 c.lnk java sth.jar 这样的吗? - Bernd Elkemann
转到 c.lnk java -jar build.jar。但是我使用Swing创建了自己的命令行实现。无论如何,感谢您提供的出色答案。 - Lukas Knuth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接