`
lvhuiqing
  • 浏览: 249731 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

JAVA平台中文编码问题讨论(上)

阅读更多

最近准备在项目组内部准备一个Java平台中文编码问题的讨论,这是大纲的第一部分,第二部分正在准备中。。。。

 

1       Unicode及其他

1.1    编码由来

每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码。由于ASCII码不能满足中文的存储要求,因此中国在ASCII的基础上制订了gb2312,之后又扩展成了GBK码。台湾为了应对同样的问题提出了BIG5。与此同时,西欧国家为了实现拉丁字符的存储需求提出了ISO8859-1

以上动作导致了所谓“本地系统”的产生,归根到底就是同样的字节数据在不同操作系统的电脑上表示成为不同的内容。一旦字节数据在特定的字符集内没有特定的对应字符,则会出现乱码。这就是乱码问题的由来。

为了解决以上的混乱局面,提出了Unicode编码。

1.2    Unicode编码

1.2.1   Unicode企图解决的问题

为了解决本地字符集混乱的问题,国际标准化组织提出了制订了Unicode编码,企图将世界上所有字符在一个字符集中全部包括,然后为每个字符进行编码。这样就可以一劳永逸的解决所有问题。

Unicode的实际情况是包含65535个字符,这个数字意味着世界上的很多字符,比如少数民族文字,康熙大辞典上的很多文字都没有被包含在Unicode字符集中。

1.2.2   Unicode的实际价值

Unicode实际并不能解决所有问题,因此很多软件、很多资料是在Unicode提出之前被开发出来,并且这些系统都运行良好。

Unicode的推广为世界范围内的其他编码之间的转换提供了一条“总线”。

1.2.3   为什么UTF-8

Unicode编码方式只是“看上去很美”,UTF-8Unicode编码解决如下几个问题:

1.       采用变长的编码方式,所有ASCII编码都是一位的,降低了ASCII码的存储容量。

2.       ASCII编码完全兼容。

3.       不会出现0x00,解决在C语言中0x00有特殊含义的问题。

4.       采用类似哈夫曼的编码方式,便于检查出错。

另外,如果使用UTF-8编码的话,即使中文系统也可以在英文操作系统上直接显示,如果使用GBK编码,英文操作系统会提示安装东亚语言包。

UTF-8不完美的地方:某些GBK码可能需要三个字节表示,加大的存储体积,降低了传输速度。

1.3    ASCII码(仅做了解)

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b71;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b71

1.4    GB2312GBK码(仅做了解)

GB码,全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。

GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于199510月,同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。

1.5    ISO8859(仅做了解)

  ISO8859 不是一个标准,而是一系列的标准,这套字符集与编码系统的共同特色是,以同样的码位对应不同字符集。其基本精神是:

  1. ASCII 相容,所以所有的低位皆不使用。

  2.高位中的前 32 个码位 (0x80 -- 0x9F 128--159),保留给扩充定义的 32 个控制码,称为 C1 控制码 (0--31 称为 C0 控制码)

  3.高位中第 33 个码位 (0xA0 160),也就是对应 ASCII SP (空格) 的码位,总是代表 Non-breakable space,也就是不准许折行的空格。

  4.每个字符集定义至多 95 个字符,其码位都在 0xA1 -- 0xFF 161--255

5.每个字符集收录欧洲某地区的共同常用字符。

 

0
0
分享到:
评论

相关推荐

    深入分析Java中的中文编码问题

    尤其是在使用Java这种跨平台语言进行开发时,不同的操作系统和硬件平台可能采用不同的字符编码,这就使得在处理文本数据时很容易出现乱码等问题。本文旨在详细探讨Java中的中文编码问题,包括常见的编码格式、编码...

    java编码总结1

    这个链接指向的是一个技术博客文章,可能讨论了Java在编码方面的最佳实践,包括如何处理GBK和Unicode编码,以及汉字在不同编码格式下的表现和转换问题。在Java中,字符编码涉及到字符集(Charset)的概念,如ASCII、...

    Java中编码总结.pdf

    接下来,文档讨论了多种常见的中文字符编码标准,如GB2312、GBK、BIG5和GB18030。GB2312是一个早期的中文编码标准,能够表示6763个汉字和682个其他符号。GBK是GB2312的扩展,提供了更多的字符支持,包括一些扩展的...

    Java字符编码及获取文件编码

    接下来,我们要讨论如何在Java中获取文件的编码。Java本身并不直接提供一个内置的方法来检测文件的编码,但我们可以使用一些第三方库或技巧来实现。例如,`java.nio.charset.Charset`类提供了识别字符集的功能,但不...

    response设置编码 java

    下面我们将详细讨论 Response 设置编码的三个方法,并分析它们之间的差异。 response.setCharacterEncoding("gb2312") 第一个方法是使用 `setCharacterEncoding` 方法来设置 Response 的编码方式。这个方法只能...

    java中文繁体转中文简体

    在“java中文繁体转中文简体”这个主题中,我们主要讨论的是如何利用Java技术来实现中文繁体字到简体字的转换。 首先,我们需要了解中文字符集。在计算机中,中文字符的表示通常使用Unicode编码,它包含了繁体字和...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    GBK是中国大陆地区广泛使用的一种汉字编码标准,它是对GB2312标准的扩展,支持更多的汉字和符号。GBK使用双字节编码,能够较好地兼容GB2312,并且支持繁体汉字。在Java中,GBK编码通常用于处理简体中文和繁体中文的...

    java汉字笔画排序源码

    总的来说,这个主题涵盖的知识点包括Java编程、数据结构(如列表和比较器)、排序算法、Unicode编码处理、汉字笔画数据库的使用,以及可能的文本处理和信息检索概念。通过学习和实践这个项目,开发者可以提升在中文...

    javajsp中 中文问题详解

    在Java与JSP环境中处理中文问题,涉及到编码、字符集转换以及如何正确处理字符串和流等关键知识点。本文将深入探讨这些概念,并提供具体的代码示例来解释如何在实际开发中解决中文显示或乱码的问题。 ### 1. ...

    JSP-Servlet中的汉字编码问题-JSP教程

    本文将围绕“JSP-Servlet中的汉字编码问题”这一主题展开讨论,通过对相关知识点的深入剖析,帮助读者理解JSP/Servlet环境中汉字编码可能出现的问题及解决方案。 #### 二、基础知识回顾 1. **字符编码**:字符编码...

    地区码与地区名称相互转换java代码11.zip

    这个“地区码与地区名称相互转换java代码11.zip”文件很可能是提供了一个Java实现,用于解决此类问题。下面将详细讨论相关知识点。 1. 地区码(Area Code): 地区码通常指的是国家、省份、城市等地理区域的编码,...

    java实现中文分词simhash算法

    中文不同于英文,单词之间没有明显的分隔符,因此在处理中文文本时,我们需要先进行分词,即将连续的汉字序列切分成有意义的词汇单元。Sanford中文分词库是一种常用的分词工具,它基于统计模型,能够根据语料库学习...

    java中各种编码转换.pdf

    下面我们将详细讨论这些编码以及它们在Java中的应用。 1. **US-ASCII**:这是7位的ASCII编码,支持最基本的拉丁字母表,包括英文字符和一些符号。它是所有其他字符编码的基础,只包含128个不同的字符。 2. **ISO-...

    JAVA开发中各种中文乱码问题

    综上所述,解决Java开发中的中文乱码问题需要关注各个层次的编码设置,包括客户端、服务器端、HTTP请求方式、数据库等。通过合理的配置和编码转换,可以有效地避免乱码现象,保证数据的正确显示和存储。

    java解压支持中文

    在IT行业中,尤其是在Java编程领域,处理中文字符在文件名或路径中经常遇到挑战,因为标准的ASCII编码不包含大部分中文字符。标题“java解压支持中文”涉及到的关键知识点是Java如何正确处理含有中文字符的压缩文件...

    Java读取TXT文本文件乱码解决方案.doc

    Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,使用 BufferedReader 和 FileReader ...

    Java处理 Jni中的汉字问题

    在Java编程中,JNI(Java Native Interface...总结来说,JNI处理汉字问题的关键在于理解编码之间的转换以及确保数据在Java和C/C++之间以正确的编码格式传输。通过选择合适的方法进行编码转换,可以有效地避免乱码问题。

    Sun_Java语言编码规范(中文版).pdf

    ### Java语言编码规范详解 #### 1. 为什么要有编码规范 (Why Have Code Conventions) 在软件开发过程中,编码规范的制定与遵循至关重要。本文档旨在详细介绍Java语言的编码规范,帮助开发者提升代码质量,增强代码...

Global site tag (gtag.js) - Google Analytics