【问题标题】:UTF-8 encoding problem in unix machineUnix机器中的UTF-8编码问题
【发布时间】:2010-10-24 10:24:42
【问题描述】:

我将一组数据导出到 java 中的 excel,数据具有某些非 ascii 字符,而在 Windows 机器中导出时,数据以 UTF-8 编码格式正确出现。但是当我在 Unix 机器中部署我的代码时,它是不能正常工作。UTF-8 编码不能正常工作。 我使用的是 Tomcat 5.5 服务器。我还在 server.xml 中包含了 URIencoding="UTF_8" 参数。但是在unix机器上还是不能正常工作

【问题讨论】:

  • 是的,请展示一些示例数据并告诉我们到底发生了什么。
  • 从数据库即时使用 java 将一组数据导出到 csv 文件中。在 windows 中,导出的数据以 UTF-8 编码正确出现。异常字符没有出现在 windows 中。但是当我在 unix 机器中部署它然后将我的数据导出到 csv 文件中时,出现异常字符,即不是采用 UTF-8 格式。我使用的是 tomcat 服务器。
  • 问题数据从何而来? HTTP 请求?文本文件?数据库?这些选项中的每一个都可能存在问题,并且在所有情况下解决方案都不同。我有一种感觉,您的问题可能是数据库,所以提一下会很有帮助:您使用的是什么数据库服务器,您如何连接到它(连接参数),您是否使用完全相同的 JDBC 库从 Unix 连接并从 Windows?
  • 数据来自数据库。我正在使用 mysql 服务器连接。你只使用相同的 JDBC 库。
  • "出现异常字符,即它不是以 UTF-8 格式出现" 你确定异常字符不存在吗因为它是 UTF-8 和你的观众不是?

标签: java unix tomcat utf-8


【解决方案1】:

使用

运行 Tomcat
-Dfile.encoding=UTF8

选项将强制 VM 采用 UTF8 作为默认编码,无论您的环境如何。我怀疑这是你的问题(不过这是一种很好的做法)

【讨论】:

  • 我在 tomcat 启动 shell 脚本的 CATALINA_OPTS 中尝试了 -Dfile.encoding=UTF8 选项。但它仍然无法正常工作。请帮助我。
  • 它在 UI 中很好,但是当我只导出数据时,它在 UNIX 中不是 UTF 格式。请帮帮我
【解决方案2】:

当您使用 UTF-8 数据时,它可能非常脆弱。链中的每一步都需要指定utf8。

(1) 在数据库中,确保表具有 UTF8 编码和排序规则。 “显示表状态”会告诉你这一点。谷歌“mysql alter table utf8”获取更多信息。

(2) JDBC连接需要指定UTF8编码。对于 Connector/J,这将类似于:

useUnicode=true&characterEncoding=UTF-8

(3) 代码中每一个读/写流,每一个字符串到字节的转换都需要指定UTF-8作为编码。很容易错过一个。如果错过了,Java 将使用系统默认值,这会因服务器而异。

(4) 此处不适用,但对于用户从表单提交的数据,需要设置请求字符编码。 (我在 servlet 过滤器中执行此操作)

request.setCharacterEncoding("UTF-8");

(5) 此处可能不适用,但如果您从 servlet 输出 HTML/XML/文本,请设置 HTTP 字符编码标头。 (如果您将 Excel 文件生成为 XML 文件,这可能适用)。

response.setContentType("text/html; charset=UTF-8");

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多