没有合适的资源?快使用搜索试试~ 我知道了~
java中文乱码字符集解决大全
5星 · 超过95%的资源 需积分: 10 48 下载量 170 浏览量
2010-09-20
13:52:07
上传
评论
收藏 166KB DOC 举报
温馨提示
试读
15页
Abstract:本文深入分析了Java程序设计中Java编译器对java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。
资源推荐
资源详情
资源评论
中文解决大全
:本文深入分析了 程序设计中 编译器对 源文件和 对 类文件的编码
解码过程,通过此过程的解析透视出了 编程中中文问题产生的根本原因,最后给出了建议的最优化
的解决 中文问题的方法。44
中文问题的来源4
计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以
单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的
汉字),人们提出了 编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,
所以,目前,大多数国际性的软件内部均采用 编码,在软件运行时,它获得本地支持系统
(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的 转化为本地系统默认支
持的格式显示出来。 的 和 即是如此,我这里说的 是指国际版的 ,我们大多数程序
员使用的是国际化的 版本,以下所有的 均指国际化的 版本。我们的汉字是双字节编码语言,
为了能让计算机处理中文,我们自己制定的 、、 等标准以适应计算机处理的需求。
所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是
编码格式以正确显示我们的汉字。如:中文 !"# 默认采用的是 编码显示,在中文
!$ 中保存文件时默认采用的保存文件的编码格式也是 的,即,所有在中文 ! 中保存的文
件它的内部编码默认均采用 编码,注意: 是在 基础上扩充来的。
由于 语言内部采用 编码,所以在 程序运行时,就存在着一个从 编码
和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,
如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的 中文问题。
同时, 是一个跨平台的编程语言,也即我们编写的程序不仅能在中文 %"#&'% 上运行,也能在
中文 ("#)* 等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文 %"#$ 上编
写的 程序,移植到英文 ("#)* 上运行)。这种移植操作也会带来中文问题。
还有,有人使用英文的操作系统和英文的 等浏览器,来运行带中文字符的程序和浏览中文网页,它
们本身就不支持中文,也会带来中文问题。
几乎所有的浏览器默认在传递参数时都是以 +,-. 编码格式来传递,而不是按中文编码传递,所以,
传递中文参数时也会有问题,从而带来乱码现象。
总之,以上几个方面是 中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而
产生的问题称作: 中文问题。
编码转换的详细过程
我们常见的 程序包括以下类别:
/直接在 '#'0 上运行的类1包括可视化界面的类2
/34 代码类(注:34 是 300 类的变型)
/3000 类
/ 类
/其它不可以直接运行的支持类
这些类文件中,都有可能含有中文字符串,并且我们常用前三类 程序和用户直接交互,用于输
出和输入字符,如:我们在 34 和 300 中得到客户端送来的字符,这些字符也包括中文字符。无论这
些 类的作用如何,这些 程序的生命周期都是这样的:
/编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以 扩展名保存在操
作系统中,例如我们在中文 %"#$ 中用记事本编辑一个 源程序;
/编程人员用 中的 0*0 来编译这些源代码,形成 类134 文件是由容器调用 来编
译的2;
/直接运行这些类或将这些类布署到 ! 容器中去运行,并输出结果。
那么,在这些过程中, 和 是如何将这些文件如何编码和解码并运行的呢?
这里,我们以中文 %"#$ 操作系统为例说明 类是如何来编码和被解码的。4
第一步,我们在中文 %"#$ 中用编辑软件如记事本编写一个 源程序文件1包括以上五类 程
序2,程序文件在保存时默认采用了操作系统默认支持 编码格式1操作系统默认支持的格式为
500#'&"# 格式2形成了一个 文件,也即, 程序在被编译前,我们的 源程序文件是采
用操作系统默认支持的 500#'&"# 编码格式保存的, 源程序中含有中文信息字符和英文程序代
码;要查看系统的 500#'&"# 参数,可以用以下代码:
6)"37'%38090:)#'&"#;
6)""'"&9"#13"#<=2;
3"#0#'&"#>380904'6081?500#'&"#?2@
3809')6"##10#'&"#2@
AA
第二步,我们用 的 0*0 文件编译我们的 源程序,由于 是国际版的,在编译的时
候,如果我们没有用-0#'&"# 参数指定我们的 源程序的编码格式,则 0*0 首先获得我们
操作系统默认采用的编码格式,也即在编译 程序时,若我们不指定源程序文件的编码格式, 首
先获得操作系统的 500#'&"# 参数1它保存的就是操作系统默认的编码格式,如 !$,它的值为
2,然后 就把我们的 源程序从 500#'&"# 编码格式转化为 内部默认的
格式放入内存中。然后, 把转换后的 )#"'&0 格式的文件进行编译成 类文件,此时
文件是 编码的,它暂放在内存中,紧接着, 将此以 编码的编译后的 文
件保存到我们的操作系统中形成我们见到的 文件。对我们来说,我们最终获得的 文件是内
容以 编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由
500#'&"# 格式转化为 格式了。
这一步中,对于 34 源程序文件是不同的,对于 34,这个过程是这样的:即 ! 容器调用 34 编译
器,34 编译器先查看 34 文件中是否设置有文件编码格式,如果 34 文件中没有设置 34 文件的编码格
式,则 34 编译器调用 先把 34 文件用 默认的字符编码格式1也即 ! 容器所在的操作系统的
默认的 500#'&"#2转化为临时的 300 类,然后再把它编译成 格式的 类,并保
存在临时文件夹中。如:在中文 %"#$ 上,! 容器就把 34 文件从 编码格式转化为
格式,然后编译成临时保存的 300 类,以响应用户的请求。
第三步,运行第二步编译出来的类,分为三种情况:
、4直接在 '#'0 上运行的类
、4 类和不可以直接运行的支持类1如 0# 类2
、434 代码和 300 类
、4 程序和数据库之间
下面我们分这四种情况来看。
剩余14页未读,继续阅读
资源评论
- 烽火伊人2011-09-22多谢分享!java的乱码问题真的很让初学者困扰,有这样一个系统的分析很有帮助!
- 慢慢走luyie2012-03-03比较系统,层次清楚
- alpha_hua2012-09-14谢谢,乱码太复杂,总之都是编码的问题
- Alick12014-01-18解决了中文编码的问题,多谢!
- a8473732013-08-30比较系统!
普通网友
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功