`
Dustin
  • 浏览: 310832 次
  • 性别: Icon_minigender_1
  • 来自: 广州/成都
社区版块
存档分类
最新评论

深入浅出Java中文问题(一) 引言

阅读更多
   真正接触过java,或者说曾经用java解决过实际问题的人,对java的中文问题应该都有一定了解。为什么我在编辑器中输入的中文好好的,在控制台打印出来却变成了“星星月亮和问号”呢?我的系统在开发过程中一点问题没有,怎么部署到实际环境中却所有中文都变成了乱码甚至整个系统都运行不起来呢?嘿嘿,你很可能就是遇到java中文问题了。java中文问题是什么?为什么会这样?我该怎么办?问题的答案应该是所有跟类似问题初次碰面的人最迫切想知道的。
     java中文问题已经是个老大难问题了,网上也好很多相关的文章,有的对原理进行了深入的分析,有的提出了解决方案。当问题出现的时候,google,baidu一下,然后根据,糊弄几下,确实有立杆见影的效果。但是,每次都这样子缝缝补补总让人放不下心呐,万一哪天又出问题,都不知道是哪里出了漏子。知其然不知其所以然的事情,还是少做为妙。
     本人就曾经跟java中文问题有过一次“美丽的邂逅”,其中的缠绵悱恻已是不堪回首。趁着最近有时间 ,决定跟它做一个彻底的了断,于是就有了这一系列的文章。(过程是有点痛苦,花了额整整两天,人都憔悴了。。)

一、什么是java中文问题
       简单作一个定义吧(自己搞的,看看就好,呵呵):所谓java中文问题是指在使用java环境的过程中由于某种原因导致中文数据不能被正确显示和记录的现象。什么时候会出现这个问题呢?举几个例子吧:当你在中文平台下用编辑器编写好含有中文的java源代码(实现控制台输出之类的),然后把它放到一个英文平台中用javac按照默认设置进行编译,执行的时候中文问题就出现了。还有一个例子就是编写java web应用的时候,当jsp、servlet中没有设置好页面的编码方式或者输入输出时的编码解码方式时,也会出现中文问题。说起来蛮抽象的,不过现在只要了解java中文问题不是别的,就是中文在使用java的过程中没有得到正确的处理,导致乱码现象的出现。还有一点就是,所谓的“中文问题”并不是只有中文才会遭遇这类问题,其实其它使用非英文(西欧)文字的国家和地区,譬如日本,韩国,香港,台湾等都会有这种问题的,只是我们用“中文问题”做一个代表而已。

二、为什么java会产生中文问题
       要了解这个问题,就要有字符集(charset)和字符编码(encoding)的概念了。字符集说明了哪些字符被收集到标准中,而编码则是说明字符集里面的字符是怎样存储的,是用一个字节还是多个字节。我们也可以这样理解,字符集就像我们的语言,像汉语,英语,法语之类的;而字符编码就是各种语言相应的文字,是表明如何记录和书写的。文字可以记录在纸上,而字符编码可以写入到文件中。我们看到纸上那个符号,就知道那代表了什么意义了;计算机一读到文件中的那个编码,也知道它代表什么含义。人的世界里语言各色各样,计算机世界里的字符集也不少,我们常用的就有ASCII,ISO-8859-1,GB2312,GBK,BIG5,Unicode(UTF-8,UTF-16)等等。
      字符集那么多,而字符编码的方案就那么几个(无非就是单字节,双字节,多字节),因此肯定会出现“撞车”现象。都是记录在文件中的编码“0xBA 0xBA”,在GBK看来就是一个“汉”字,但是在ISO-8859-1看来却变成了两个“?”,说是认不到。这就像一个纸上写着个“爹”,我们都知道汉语里那是老爸的意思,但是跑到日语里,就不知变成什么意思了。最要命的是,如果没有上下文指明这是汉字还是日本字,那么就算有一个人精通这两种语言,对于如何解析也是无从下手的。java面临的就是这样的问题,因为java内部是Unicode的,因此理论上可以处理世界上任何一种字符编码。但是java运行在这样一个纷繁复杂的世界中,要处理各色各样的输入和输出,要和各种字符集打交道。我们在使用java的时候,至少给java通知一声,说我现在给你的是GBK的哦,你给我输出为ISO-8859-1的,那边的猪头只认识那些英文字符的。OK,马上,java知道以后,就可以正确完成你所布置的任务了。
       但是,如果你什么都不说,java只好按照默认的方式进行工作了。假设java的默认方式是按照GBK读写的,但是有一天,你给了java一段utf-8的数据,又没有跟它指明,好了,中文问题就来了。此情此景,就像某人递给你一张纸条,上书“奸爸爹”,却没告诉你这是日文,你就把它当中文理解,于是×※##¥。。
      所以啊,说到底,java中文问题就是因为在使用java处理输入输出的过程中没有进行正确的设置而导致的。你可能会说,怎么这么麻烦啊,怎么不见人家php,asp会出现这种问题。呵呵,因为你要享受java“一次编译,到处运行”的好处,就必须付出点代价,上帝是很公平的。

三、如何解决java中文问题
      好了,我认了,那怎么解决呢?具体问题具体分析。java中文问题的具体原因有很多,随着所处的环境的不同,解决方法也有所差异。具体的解决方法会在后续的文章中一一给出。

    深入浅出Java中文问题(二)字符,字节和编码
    深入浅出java中文问题(三)console程序的中文问题
   
深入浅出java中文问题(四)Web应用中的中文问题
    深入浅出java中文问题(五)数据库出现的中文问题
    深入浅出Java中文问题(六) 文件读写

还加上一篇Python的 Python 中文问题研究

分享到:
评论
4 楼 a_nuo 2007-05-10  
好厉害
这么详细
仔细研究一下
3 楼 Dustin 2007-05-08  
学习笔记,期待大家的宝贵意见,指出盲点所在
2 楼 jie_java 2007-05-08  
不错的文章,好好看看先.
1 楼 spiritfrog 2007-05-08  
这样的文章没有人顶吗?总结的非常好啊,感谢Dustin的辛勤劳动。

相关推荐

    Java编程思想:引言

    Java编程思想,希望对你有用

    视频图像处理第一讲引言

    视频图像处理第一讲引言视频图像处理视频图像处理第一讲引言第一讲引言视频图像处理第一讲引言视频图像处理第一讲引言

    深入浅出Linux设备驱动编程

    一.引言 2 二.Linux内核模块 4 三.字符设备驱动程序 7 四.设备驱动中的并发控制 14 五.设备的阻塞与非阻塞操作 22 六.设备驱动中的异步通知 31 七.设备驱动中的中断处理 33 八.定时器 38 九.内存与I/O操作 ...

    深入解析Java Spring框架

    引言 Java Spring框架作为企业级应用的首选框架之一,承载着广泛的开发任务。本文将全方位探讨Java Spring框架,包括基本介绍、个人心得、实际项目经验分享以及相关深度练习。 一、Java Spring框架介绍 1.1 概述 ...

    Think in java(中文版)优质排版

    同人类任何语言一样,Java为我们提供了一种表达思想的方式。如操作得当,同其他方式相 比,随着问题变得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。 不可将Java简单想象成一系列特性的集合;如孤立地看...

    javajava概要设计方案.doc

    Lucene , apache1.3定义spider (基于一个树型spider改写而成) Index (lucene) Search 实现搜索 (JSP , lucene ) Analyzer 实现分词 (CJKAnalyzer)Eclipse (JDK开发平台 (IDE) )1.4参考资料 中文分词 (index 和 ...

    Java虚拟机规范中文版

    Sun公司的Java虚拟机规范中文版 第一章 引言 第二章 JAVA的概念 第三章 JAVA虚拟机的结构 第四章 Class文件格式 第五章 常数池解析 第六章 JAVA虚拟机指令集 第七章 为JAVA虚拟机编译

    电信增值服务计费管理系统-毕业论文_Java

    本系统是是一个强大的基于B/S模式的同时能够提供管理员与普通 用户的系统,争取做到实时更新,快速稳定。本系统的服务器为UNIX服务器(开发时在Linux),数据库 设计是基于MYSQL平台,系统用到了JAVA EE三个开源框架...

    Thinking in Java简体中文(全)

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象...

    java联想(中文)

    1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2章 一切都是对象 2.1 用句柄操纵对象 2.2...

    java虚拟机规范(java SE7)

    java虚拟机规范,高清PDF版本,含有目录结构:第一章:引言; 第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:...

    Thinking in Java 中文第四版+习题答案

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 ...

    Java虚拟机规范中文版(电子书)

    Java虚拟机规范中文版(电子书) 目录 第一章.引言 第二章.JAVA概念 第三章.JAVA虚拟机的结构 第四章.class文件格式 第五章.常数池解析 第六章.JAVA虚拟机指令集 第七章.为JAVA虚拟机编译 第八章.线程和锁 第九章.优化...

    引言。。过来人对学习Java的看法

    值得一看。。。对于学习迷茫的人。。尤其是学习计算机的学生

    java课程设计(含源代码)

    其中引言部分主要是介绍JAVA语言区别于其他语言的无可比拟的优点以及在编写游戏方面的优势,这也是我们为什么用JAVA 写的原因。问题陈述主要讲为何编写这个游戏,以及对整个游戏进行整体的一个构思,规划,要实现的...

    javaemail邮件系统项目(毕业论文,附文档)

    这是毕业时的完整javaemail邮件系统项目附文档

    嵌入式系统/ARM技术中的深入浅出:什么是基于Java的责任链模式

    一、引言  初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说的是一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。病人因此楼上楼下的跑了好多科室,最后无果而终。  责任链模式...

    专业网站调优-引言

    这是《网站性能优化--从前端到后台的优化》一书的引言部分,全面英文版通读一遍之后,感觉非常实用,故有翻译给国人一起共享的想法。现将引言部分抛出,如果大家认为有用,我将陆续将后续章节翻译成中文。

    神经网络 引言 引言

    人工神经网络是一种旨在模仿人脑结构及其功能的信息处理系统。

    java 编程入门思考

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象...

Global site tag (gtag.js) - Google Analytics