我在 Ubuntu Server Edition PC 上的 Glassfish Web 服务器上部署了一个 Java 应用程序。
此应用程序必须提供的服务之一是在特定文件夹中安装 ISO 镜像并将此文件夹中的所有内容复制到另一个目的地。
自从我的 Java 方法找到西里尔文文件名后,它就崩溃了。此文件名在服务器应用程序日志中显示为“??????????????.txt”。
首先我认为这是一个 linux 问题,因为这个文件在终端中也显示不正确。添加 CP1251 语言环境后,linux 终端中的问题已解决,但我的应用程序仍然抛出错误。
UbuntuForums (http://ubuntuforums.org/showthread.php?t=1813920) 的一个人建议我用“convmv”实用程序转换这个坏文件,但是这个实用程序的输出表明这个文件已经是一个 UTF- 8.
之后,我用相同的方法创建了一个测试应用程序,并在同一台 PC 上运行它,但就像“java Test $arguments$”一样。
它确实奏效了!
简单的 System.out.println 方法正确显示文件名,并成功将问题文件复制到另一个文件夹。
这个事实让我别无选择,只能声称 Glassfish 是我的类(class)、java 和 linux 之间的差距(尽管我不确定这怎么可能)。
Glassfish 中是否有任何特定于字符编码的设置我可以更正以修复此错误,或者我可能遗漏了某些内容而问题实际上并不存在?
提前致谢!
安德鲁
最佳答案
尝试更改 Charset.defaultCharset()
。参见 Setting the default Java character encoding?更多细节。
另请参阅 Glassfish 配置,例如
在 sun-web.xml 中你必须看到这样的东西:
<locale-charset-info default-locale="">
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>
关于java - Ubuntu/Java/Glassfish 的奇怪文件名字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151784/