各种设置太麻烦,记不清楚各个地方文件格式,只能肯定就是ISO-8559-1,UTF-8,GBK三种编码格式。
一、properties读取中文乱码
用java写入properties文件时用的是UTF-8,使用这个文件的编码格式也是UTF-8但就是读出来就变乱码,把全部Eclipse能设置的都设成了UTF-8还是乱码,且读到的数据无法与MySQL数据库读出的数据进行比对,在Eclipse中打印出来也是乱码。
二、index.html回传中文乱码
文件传回来的中文也变成了乱码,也无法数据库读出来的数据比对,打印到控制台也是乱码。
三、解决办法
针对每个出乱码的地方都采用
new String(str.getBytes("ISO-8859-1"),"UTF-8")或者是new String(str.getBytes("UTF-8"),"UTF-8")亦或是new String(str.getBytes("GBK"),"UTF-8")进行试验。因为我能看到的地方都已改成了UTF-8,所以这样试。其中str是字符串。如:
index.html传回的中文用以下代码处理后变成正常中文,可打印到控制台,也能与数据库内容对比。
porject_name = "%" + new String(request.getParameter("project_name").getBytes("ISO-8859-1"),"UTF-8") + "%";
从properties读出的表头中文用以下代码处理后也能正常专到网页中显示在表头上
out.print("<th>" +new String(prop.getProperty(data.getColumnName(i)).getBytes("ISO-8859-1"),"UTF-8") + "</th>");
但在不同的机子上使用时出现了同一个地方编码格式不一样的问题,可能是创建文件方式不一样引起的,用java的Map<String,String>写进properties的数据在读出来时的转换方式用
out.print("<th>" +new String(prop.getProperty(data.getColumnName(i)).getBytes("UTF-8"),"UTF-8") + "</th>");
转换后才正常,前后都是UTF-8看上去象是没有转过一样的,但就是这样写了才解决。在站内找了一下,也是写这个方法的文章中有答案,可惜没记住,只记得大意是指他告诉JVM我存进去的是什么格式,取出来之后要转成什么格式。总之是前后都一样,但不转就是不行。