Java多语言编码问题解析(1)

原创 2004年06月23日 11:34:00

1Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的告诉编译器。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

例如:我们的源文件是以UTF-8的方式保存的,而在编译时编译器却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Unicode的编码转换方法来对源文件进行转换。

a.对于控制台程序,编译器会把源文件看作是由系统默认的编码类型来编码的(系统默认的编码类型取决于在控制面板区域设置里的配置,中文win2k下通常是GBK),也可以使用-encoding参数来设置,如:javac -encoding UTF-8,这样编译器就会把源文件看作是用UTF-8编码的(只是告诉编译器源文件的编码类型,不是对源文件转码)在各种语言的平台上只要在编译用时-encoding指定与源文件的编码相同的编码方式,就不会存在国际化的问题了。

b.对于JSP,编译器则会根据设定的字符集来判断JSP文件使用的是什么编码方式,进而将其转换成unicode后进行编译;若JSP中未指定,编译器则会把JSP文件看作是按照系统默认的编码来保存的。在JSP2.0里新增了一个<%@page pageEncoding=" "%>指令来通知编译器这个源文件所使用的编码方式。

 

2、在处理输入输出时,注意设置输入流和输出流的编码类型与用户输入时和输出设备显示时采用的编码方式一致。

由于JRE在处理输入输出时会将输入或输出的内容进行编码转换,对于输入会转换为unicode后再送入,因此要正确的匹配实际输入内容的编码方式和告知JRE的编码方式,对于输出,会由unicode转换为其他的编码再送出程序,因此要正确匹配输出设备显示时用的编码方式和告知JRE的编码方式。

例如:程序中设置输入流的编码是new  InputStreamReader(System.in,"GB2312");而程序运行后用户输入时用了繁体中文的输入法,输入了BIG5编码的内容,这样JREBIG5编码的内容当作GB2312的进行了GB2312->unicode的编码转换,这样转换后的结果显然不是用户想要输入的内容了。

默认情况下,JRE会把输入输出的内容当作是按照系统默认编码方式编码的。

 

3、在Servlet中,除了一定要把源文件用的是什么编码方式正确无误的告诉编译器外,还要注意实际提交的URL数据、表单数据的编码格式和request中声明的编码格式一致。

客户端浏览器在通过表单和URL提交数据时,容器和JVM会将request中的数据看作是按照request所声明的编码方式来编码的,将数据由这种编码方式转换为unicode后再送入servlet(实际上容器会先将request中的数据转为一种中间编码方式,具体根据容器的配置而定,再由JVM由这种中间方式转换为unicode,通常这种中间格式是ISO)servlet输出的unicode数据会由容器根据response中声明的编码方式进行转换,再送到客户端浏览器上。

在接收客户端输入时,用request.setCharacterEncoding()声明请求中数据的编码方式。

在向客户端输出时用response.setContentType("text/html;charset=");声明响应的数据的编码方式,告知浏览器以哪种编码方式显示。

 

4、在JSP中,由于JSP本就会被JSP编译器编译为servlet来运行,因此情况与servlet相同。

  <%@page contentType="text/html; charset= "%>
  <%request.setCharacterEncoding("");%>
这两个JSP指令声明了请求和响应的编码方式。

只要确保URL参数或表单中数据的编码方式和所声明的编码方式一致,再通过<%@page pageEncoding=" "%>告知JSP编译器本JSP文件采用的编码方式及含有哪种字符,即可解决JSP的字符编码问题。

Java多语言编码问题解析

1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。  例如:我们的源文件是以UTF-8的方式...
  • studious_cat
  • studious_cat
  • 2011年03月05日 16:24
  • 421

Java多语言编码问题解析(2)

这里是一个具体的例子: 现在因为浏览器对UTF-8的支持,我们可以通过在源文件、请求、响应中都使用unicode编码方式,来轻松达到处理国际化和字符编码问题的目标。以我们使用的tomcat4.1.2为...
  • enoeht
  • enoeht
  • 2004年06月23日 11:38
  • 1142

JAVA基础:Java多语言编码问题解析

 1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。  例如:我们的源文件是以UTF-8的方...
  • beyondqinghua
  • beyondqinghua
  • 2007年10月29日 18:32
  • 177

iOS 生成国际化包 APP支持多语言配置

如果你的App需要支持多国语言。那么,就应该为你的App应用添加“国际化”支持。 “国际化”乍看很高深。其实,苹果xCode都为我们设置好了,我们只需要简单的配置,就能够完成。 “国际化”顾名思义...
  • ZhengYanFeng1989
  • ZhengYanFeng1989
  • 2017年05月23日 10:24
  • 333

JAVA WEB上的多语言切换

因为在项目目前是验证demo阶段,所以功能能够支持的越多越好 so leader让我添加一个中英文切换功能 经过各种search后,初步实现了这个功能,下面把方法告诉给大家,仅供参考,如果有更好的方案...
  • wuhawang
  • wuhawang
  • 2016年08月17日 10:33
  • 7045

Java Web的Struts2的多语种网站的多语言切换实例

先看图图; 一      首先下载Properties Editor插件,该插件是支持中文的资源文件编辑器;MyEclipse 10.6 以上不用安装该插件...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年05月28日 11:22
  • 1705

Java实现多语言切换

在一个项目中涉及到中英文版本,一般在登录页或者首页的时候会有中英文连接 这个连接可以这样写: 前台读取多语言: 其中 标签是struts自带的可以获...
  • haqer0825
  • haqer0825
  • 2012年11月19日 10:12
  • 8064

java实现多语言配置i18n

1、创建资源包和资源文件 一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“inspectionJsonMsg...
  • baidu_20608025
  • baidu_20608025
  • 2018年01月20日 11:30
  • 26

springMVC-多语言I18n

springMVC增加多语言,Java默认的多语言配置文件后缀为properties。这里记录一种可从properties文件中查找key或从xml文件中查询key的配置方式。 首先在springMV...
  • hao114500043
  • hao114500043
  • 2016年08月02日 14:18
  • 2201

JavaWeb的编码问题

无论是图片,文档,声音,在网络IO,磁盘io中都是以字节流的方式存在及传递的,但是我们拿到字节流怎么解析呢?这句话就涉及了编码,解码两个过程,从字符数据转化为字节数据就是编码,从字节数据转化为字符数据...
  • yuhaiqiang_123
  • yuhaiqiang_123
  • 2016年07月02日 16:14
  • 3104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java多语言编码问题解析(1)
举报原因:
原因补充:

(最多只允许输入30个字)