我正在编写一个应用程序,该应用程序读取包含英语和中文词汇列表的文本文件。然后将它们显示在 JTable 中。当我在 Eclipse 中运行或调试应用程序时,一切都显示正常。我可以看到并阅读文字和英文。但是,当我从命令行或可执行 jar 执行应用程序时,一切都是错误的。这些字符要么显示为方 block ,要么显示为乱码。
我还有一个文本框,当我在其中输入中文时,它会正确显示。
我的第一个想法是这是字体问题。我正在使用系统上安装的字体。由于我无法保证使用此应用程序的人将拥有该字体,因此我将其移动到资源文件夹并从文件加载字体。字体看起来好像已加载,因此我确信这不是字体问题。
我发现另一个问题建议使用-Dfile.encoding=utf-8。我已经尝试过了,但没有成功。
Stack Overflow 的杰出人士对如何实现这项工作有什么建议吗?
最佳答案
I'm writing this on a non-chinese version of Windows.
那么你将永远无法让 Java 程序产生中文命令行输出。
像几乎所有语言一样,Java 使用具有基于字节 IO 的 C 标准库。 Windows 命令提示符使用特定于区域设置的默认代码页解释基于字节的 IO。这绝不是 UTF,因此当前语言环境默认代码页之外的 Unicode 字符将无法工作。
(理论上,您应该能够通过更改控制台字体并使用 chcp 65001
(UTF-8) 和 -Dfile.encoding=UTF-8
来使其工作,但实际上,由于 C 运行时中的错误,它无法可靠地工作。命令提示符上的 Unicode 是一个长期存在的痛点。)
关于java - 当从命令行或 jar 文件执行应用程序时,JTable 将无法正确显示 Unicode。不过在 Eclipse 中它工作得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546857/