1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。

例如:我们的源文件是以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里新增了一个指令来通知编译器这个源文件所使用的编码方式。

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

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

例如:程序中设置输入流的编码是new InputStreamReader(System.in,"GB2312");而程序运行后用户输入时用了繁体中文的输入法,输入了BIG5编码的内容,这样JRE把BIG5编码的内容当作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相同。

这两个JSP指令声明了请求和响应的编码方式。

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

这里是一个具体的例子:

现在因为浏览器对UTF-8的支持,我们可以通过在源文件、请求、响应中都使用unicode编码方式,来轻松达到处理国际化和字符编码问题的目标。

以我们使用的tomcat4.1.2为例,过程如下:

1、编写JSP页面时:在每个JSP页面在页首都要增加一行:

在编辑JSP页面时,一定要确保JSP文件以unicode的方式保存,目前几乎所有的编辑器都有以unicode编码保存或将文件内容转换成unicode的功能。

2、增加一个用来声明request的CharacterEncoding的类SetCharacterEncodingFilter.java;

SetCharacterEncodingFilter的这个类主要的作用就是:把request在从页面刚提交到server端的时候的encoding声明为我们想要的encoding,通过调用request的方法setCharacterEncoding (String encoding) 来改变,这样可以使request的从客户端传过来的时候,按我们在web.xml (在第二点可以讲到) 中配置的encoding来对提交的数据编码。

3、修改web.xml文件,配置一个filter来过滤全部url请求,通过第二步中的类,声明所有url请求的编码类型未UTF-8。

在web.xml文件中加上以下这段:

java设置语言编码_Java多语言编码问题解析相关推荐

  1. java设置过期时间_java设置session过期时间的实现方法

    本文实例讲述了java设置session过期时间的实现方法,分享给大家供大家参考.具体实现方法如下: 1.Timeout in the deployment descriptor (web.xml) ...

  2. java 设置颜色代码_java怎么设置颜色

    java设置颜色的方法:首先Windows图标键加R打开运行,输入mspaint,回车打开画图软件:然后打开编辑颜色,并选择需要的颜色:最后对应的填进代码里即可得到所需颜色. [相关学习推荐:java ...

  3. java设置窗体焦点_JAVA之关于swing窗体设置默认焦点-Go语言中文社区

    画了个简单的dialog, 但是焦点总是停在User Name的text field上. 想把焦点放在OK button上, 按回车的时候就能执行Ok button的功能. 加了dialog.getR ...

  4. java 获取电脑唯一编码_java获取页面编码

    最近研究抓取网页内容,发现要获取页面的编码格式,Java没有现成的实现方法..只能自己写了 codeimport info.monitorenter.cpdetector.io.CodepageDet ...

  5. Java运行作业控制语言_Java安全——语言本身的设计

    Java安全--语言本身的设计 Java 安全 内在安全机制 Java语言本身的安全机制是要保护内存资源--保证内存完整性,核心的安全特性要确保程序不能非法解析或修改驻留在内存中的机密信息.从语言本身 ...

  6. java 统一编码_java GBK UTF-8编码与自动识别与统一(乱码问题)

    今天用印象笔记导个人一些笔记(txt的,个人系统是windows),发现标题都是txt的第一行,并且还有的是乱码.听说只有MAC下的印象笔记才有以txt文件名为标题的功能,个人心情就像我家门前的那条小 ...

  7. java bufferedinputstream 编码_java中关于编码的问题(字符转换流及字符缓冲流 )

    上次我们使用的是字节流,还有一种方式就是字符流,上次说过如何分辨使用哪种流,如果记事本可以读懂则使用字符流,否则使用字节流.使用字符流就需要牵扯到编码的问题,下面给出一种转化流的格式. OutputS ...

  8. java gbk编码_java GBK UTF-8编码与自动识别与统一(乱码问题)

    今天用印象笔记导我的一些笔记(txt的,我的系统是windows),发现标题都是txt的第一行,而且还有的是乱码.据说只有MAC下的印象笔记才有以txt文件名为标题的功能,我的心情就像我家门前的那条小 ...

  9. java 及时释放内存_Java 等语言的 GC 为什么不实时释放内存?

    最基本的纯引用计数方式的自动内存管理可以做到实时释放死对象,但却无法处理存在循环引用的对象图的释放.这个问题一定程度上可以通过引入弱引用的概念来解决,但通用的能处理带循环引用对象图的引用计数都是有别的 ...

最新文章

  1. Ubuntu/CentOS下使用脚本自动安装 Docker
  2. 绕过TracerPid检测
  3. android 日期相,Android日历始终保持相同的日期
  4. html360度视角观赏,360度全景图是如何生成的?
  5. python dataframe索引转成列_如何将 Pandas DataFrame 的索引转换为列
  6. ‮女的样么什‬人赚不到钱?͏
  7. HDU 3966 Aragorn's Story(树链剖分)题解
  8. 技术分析是用来骗我的吗?
  9. R 学习笔记《四》 R语言初学者指南--载入数据
  10. 省市区随机获取 java_随机获取省市区-Groovy
  11. C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。
  12. xLang 的类型转换
  13. EXCEL-日常技巧整理-2-单元格拆分后原数据填充
  14. auto-cpufreq安装及配置过程
  15. 根椐图片,请猜一四字成语!有一点难度喔:)
  16. java3D实现空间立方体_CSS3 3D旋转立方体
  17. C++怎么操作EXCEL
  18. ​Python:PyTorch 汽车计数示例
  19. Linux 设置开机自启动程序
  20. mysql b tree索引原理_B+Tree原理及mysql的索引分析

热门文章

  1. MATLAB相干成像系统,Matlab光学仿真课程设计-基于Matlb相干与非相干照明成像系统的仿真.docx...
  2. WPS在线预览,无需安装任何浏览器插件
  3. SQL 触发器的作用,好处和坏处
  4. 数据指标拆解(一)社区团购--美团优选
  5. 微信小程序那点事儿(必看踩坑实用解决BUG)------持续更新(2)
  6. unsupported_grant_type
  7. 如何在 Windows 中更改桌面位置
  8. python数据库开发 dga_DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测)...
  9. GeoGebra入门之一分钟制作光的反射动态仿真模拟课件
  10. RPG 游戏数值系统—1