-GWA2 Java版本的i18n/中文编码/乱码问题

本篇问题域被定义为 -GWA2-吉娃兔)的 -Java 版本的多语言的编码/乱码问题,也包括中文的编码和乱码问题。当然,也具有普遍意义,包括所有Java/JSP应用的中文编码、乱码问题。

gwa2-logo-201606.v2.png (300×300)

这次距离上次写Blog间隔的时间较长,主要是由于发布 -GWA2 Java版本占用了大量的业余时间(包括熬夜),所以拖了一些时间,中间的探索过程(如对反射、序列化的相关思考和实验)还是有值得记录的地方,今后慢慢整理。其中之一就是Java的字符编码,或者再收窄成Java应用的中文字符乱码问题。 网上搜索Java中文乱码的帖子有很多,包括我自己几年前也写作过,如在2009-12-10 17:05:14发布的“

javac编译java文件乱码的解决方案

”贴文和2014 年 11 月 21 日的“

中文编码杂谈

”,谈了在一个Java实现的游戏项目中的中文编码问题及相关方面的知识和问题,这次之所以重新谈,是立场发送了改变,不只是解决问题,而是以更好的方式解决问题——极力避免将宝贵的计算资源用在字符转码上,尽量不在应用代码成使用字符转码的方法,不做字符转码的事情。 要这样做就是创造统一的运行时环境,包括输入与输出,Java源码的i18n的编码是unicode,我们选择的统一的运行时字符编码是UTF-8. 要实现这一目标设计到Webserver(App container)、Java类、JSP、HTTP和数据库后台、HTML前端等,下面分别记录,以形成可供参考的文档。

0. Java虚拟机启动时(Webserver、App container等) 在命令行带入指定字符编码的启动参数 -Dfile.encoding=UTF8

1. JSP文件页面头部时 设置JSP页面的语言及编码 <%@page language=”java” pageEncoding=”UTF-8″%> 很多时候,要求这个语句放JSP文件的第一行.

2. JSP初始化运行时 加入对语言环境变量的指定,调用设置语句 System.setProperty(“sun.jnu.encoding”, “UTF-8”); System.setProperty(“file.encoding”, “UTF-8”); request.setCharacterEncoding(“UTF-8”);

3. JSP对输出内容做字符编码控制 response.setCharacterEncoding(“utf-8”); response.setContentType(“text/html;charset=utf-8”);

4. 输出内容编码的指定 如果输出的是HTML或者XML需要在相应的文档里显示地声明字符编码是UTF-8, 如在HTML中 <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″/> 或者在XML中

 <?xml version="1.0" encoding="UTF-8"?>

经过上述7个步骤的设置,基本的UTF-8环境应该已经统一起来了。然而,如果内容来自数据库(以MySQL为例),字符编码仍然是个不小的问题。如果是这样,需要在JAVA连接数据库时和进行读写时进行相应的操作。当然前提是,数据库及数据表也是UTF-8的编码。 基本上可以确定,读写数据库,如果不进行字符转码且操作正常,需要在如下四个方面取得高度地一致。 Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 对应地在JSP中进行补救的相应措施包括:

5.  连接数据库时 在JDBC等驱动加载时,增加字符编码指定参数 setCharacterEncoding=utf8 在进行创建连接进行查询时,首先执行SQL语句 set names ‘utf8’ 经此6个方面的设置,大致成了。

-GWA2 是 General Web Application Architecture, 通用网络应用(软件程序)架构,也提供了 -PHP 对应的版本。 utf8   附记及扩展:

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text / 每个程序员都需要绝对、积极地知道一些文本编码和字符集的事情

This entry was posted in -GWA2, 服务器运维, 编程技术, 计算机技术 and tagged , , , , , , . Bookmark the permalink.

One Response to -GWA2 Java版本的i18n/中文编码/乱码问题

  1. Wadelau says:

    -R/R2SP , 談論了類似的問題和解決方法.
    http://www.baeldung.com/tomcat-utf-8

发表评论

电子邮件地址不会被公开。 必填项已用*标注