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

这两天在做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了。

问题解决啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值