java - Ubuntu/Java/Glassfish 的奇怪文件名字符编码问题

标签 java encoding ubuntu glassfish

我在 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/

相关文章:

java - 如何从 context.xml 注入(inject)值

java - 静态 block 中thread.join()引起的死锁

node.js - Nginx:[警告] 0.0.0.0:80 上的冲突服务器名称 "non.com",已忽略

linux - 他们是否有任何特定标准来保留 linux 应用程序的设置?

python - 自动运行 python web-scraping 程序

java - 具有多个应用程序上下文的 Spring MVC 应用程序

java - 管理 .jsps 和 servlet 之间的请求

python - 如何在 CSV 文件中写入 UTF-8

C# 转换 Unicode 字符

php - 显示latin1编码的MySQL表中的西里尔字符