您的位置:首页 > 其它

cms开发中遇到的中文显示乱码问题

2007-10-25 14:29 351 查看
这两天在做cms开发时遇到中文显示的乱码问题,用了一个星期的时间,终于解决了,记下来。

我在数据库端定义的编码格式是UTF-8的,所以数据写入数据库时应该是UTF-8格式,但是我在客户端看到的中文是乱码,后来用mysql自己的客户端登录后就是正常的中文了。但是前台页面显示的乱码问题还是没解决,我又怀疑是jsp和html页面的charset不是UTF-8的,我就把页面的字符集显式声明成UTF-8的,但还是不成。 同事说可能是用outputstream写模板文件时没用UTF-8写,所以中文在html加载模板数据时是以乱码的形式加载的。于是我又把cms里读数据库数据的部分改成:
String zhStr = new String("读到的字符串".getBytes("UTF-8"),"UTF-8"),这样可以保证从数据库里得到的中文是正确的。
写模板的outputstream我改成:
Writer bout = new BufferedWriter(new OutputStreamWriter(new java.io.FileOutputStream(f),"UTF-8"));
java中的OutputStreamWriter可以在写文件时指定以何种编码格式写入数据。把OutputStreamWriter封装在BufferedWriter中可以防止writer没此写入数据时频繁调用编码转换器。
按说这样应该解决问题了,可乱码照旧。
后来我查到这个cms是用velocity写html页面的,当中有一个方法是得到已有数据的template,并将对应变量的数据写入。
Velocity.getTemplate("/live/" + idInode + "." + VELOCITY_HTMLPAGE_EXTENSION).merge(context, out);
问题就在这里,Velocity得到的template的内容编码格式是ISO-8859-1的,所以在通过template写html时编码不是UTF-8,于是我将这句改成了:
Template template = new Template();
template = Velocity.getTemplate("/live/" + idInode + "." + VELOCITY_HTMLPAGE_EXTENSION,"UTF-8");
template.merge(context, out);
这样template的编码格式就是UTF-8了。
问题解决啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: