3
String departmentName = request.getParameter("dept_name");
departmentName = new String(departmentName.getBytes(Charset.forName("UTF8")),"UTF8");
System.out.println(departmentName);//O/p:  composés

在 Windows 中,显示的输出是我所期望的,它还获取了部门名称匹配条件的记录。

但在 Linux 中它返回“compos??s”,所以我的数据库查询失败。

谁能给我解决方案?

4

3 回答 3

2

也许是因为 CharsetUTF8不存在。您必须使用UTF-8. 请参阅javadoc

于 2013-03-08T07:03:39.737 回答
0

首先,使用 unicode 输出System.out.println并不是一个好的指标,因为您正在处理控制台编码。打开文件OutputStreamWriter,明确设置编码为UTF-8,然后你可以判断请求参数是否正确编码。

其次,可能存在数据库连接编码问题。对于 MySQL,您需要在连接字符串中明确指定编码,对于其他,也可能是,如果未指定,则采用默认系统编码。

于 2013-03-08T08:12:19.977 回答
0

首先,试着弄清楚你在每个特定地方的编码。

例如,如果您的 Linux 系统使用 UTF-8 字符集运行,则该字符串可能已经具有正确的编码;那个 hack 可能只需要在 Windows 上。

最后但同样重要的是,你怎么知道它是不正确的?不正确的不是你的观众吗?您的控制台日志查看器使用什么字符集?

您需要执行许多检查以找出编码与应用程序该点预期的编码不同的地方

于 2013-03-08T08:56:39.023 回答