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”,所以我的数据库查询失败了。
任何人都可以给我解决方案吗?
答案 0 :(得分:2)
可能是因为Charset UTF8
不存在。您必须使用UTF-8
。请参阅javadoc。
答案 1 :(得分:0)
首先,使用带有System.out.println
的unicode输出并不是一个好的指标,因为你正在处理控制台编码。使用OutputStreamWriter
打开文件,将设置编码解析为UTF-8,然后您可以说明请求参数是否正确编码。
其次,可能存在数据库连接编码问题。对于MySQL,您需要明确指定连接字符串中的编码,对于其他,也可以是,未指定时采用默认的系统编码。
答案 2 :(得分:0)
首先,尝试找出每个特定位置的编码。
例如,如果Linux系统使用UTF-8字符集运行,则字符串可能已经具有正确的编码;那个黑客可能只在Windows上需要。
最后但并非最不重要的是,你如何知道它是不正确的?并且您的查看器不正确吗?您的控制台或日志查看器使用什么字符集?
您需要执行大量检查才能找到,其中的编码与您应用程序的预期不同。