【发布时间】:2012-10-20 19:34:46
【问题描述】:
我有一个 JSF 应用程序在 Fedora 17 的 tomcat6 上运行,使用 firebird 作为数据库,从数据库到应用程序的所有寄存器都存在编码问题。
语言是巴西葡萄牙语,所以我需要 é、ã 和 ç,而这里所有这些特殊字符都有问题。
原始源代码中的é和ã是可以的,只有直接来自数据库的那些给我带来了麻烦......
知道发生了什么吗?
这是一个奇怪的字符应该是é的图像
从数据库恢复时会出现问题。
【问题讨论】:
-
JSF 1.x 还是 2.x?你到底在说哪个“麻烦”?请提供更多细节。你看到的是哪些角色?它究竟在哪一步显示错误的字符?直接在Java代码中从数据库中检索后?还是只在生成的 HTML 输出中?
-
什么是DB的默认字符集(或特定的coumns),什么是连接字符集,这些数据是来自BLOB SUB_TYPE TEXT还是(VAR)CHAR?
-
试图添加更多信息
-
您仍然不清楚它何时失败。请从开发人员的角度阐述问题,而不是从最终用户的角度。首先,在从数据库中检索数据后直接的代码中,放置一个调试断点或一个记录器或一个 system.out.println,以便您可以调查 JDBC 驱动程序是否已正确解码它。请注意,您应该绝对确保您的 IDE 和 logger/stdout 控制台本身也使用正确的字符集(即您必须能够执行
System.out.println("éãç")并在控制台中按原样查看)。 -
请注意,我假设字符已正确存储在数据库中。因此,如果您直接使用一些数据库管理工具查看数据库,这些字符应该看起来不错。否则,首先将其作为 JSF 问题发布是没有意义的。由于您使用的是 JSF 2.x(默认情况下,它本身已经在所有层中使用 UTF-8),我越来越认为问题实际上出在 DB 设置或 JDBC 驱动程序配置中。