`
GIL_CHEN
  • 浏览: 5664 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

字符集的基本知识

阅读更多

最近看到一个关于Oracle字符集的文章, 对字符集的基本知识讲解的不错, 特此摘抄. 重点关注GB2312/GBK/GB18030的关系

 

讲到数据库的字符集设置,首先需要对字符集的知识有些了解。以下是字符集的基本知识介绍:由于计算机只能存储使用二进制数据,因此对于一些字符或符号,需要对它们进行编码,用编码后的数值来表示这些字符。对于一组符号的编码集合就是字符集。
字符集有很多种,最初的字符集是ASCII,它用一个字节中的7位来表示128个字符,第8位没有使用。它包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)等。由于ASCII支持的字符很有限,因此随后又出现了很多的编码方案,这些编码方案大部分都是包括了ASCII的,它们只是做了扩展,这些扩展的内容一般各不相同,因此说ASCII是一个比较基本的编码,EBCDIC编码是另一个比较基本的编码,它的部分字符采用了和ASCII不同的编码值,因此两者是不兼容的基本编码方案。采用EBCDIC编码的比较少,目前主要是IBM 的系统采用,如AS400及S390系统,大部分的系统都是基于ASCII编码的。
由于亚洲国家的字符集相对复杂一些,因此一般都使用了两个及以上的字节进行编码的方案。对于简体中文,GB2312是国家1981年实施的编码标准,通行于大陆。新加坡等地也使用此编码。GBK编码是GB2312的扩展,是1995年发布的指导性规范,它在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。目前最新的汉字字符集是2000年的GB18030,它是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。目前简体WINDOWS的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,因此GBK还是我们目前最常用的简体中文字符集。
由于编码方案太多且彼此之间不兼容,存在互相之间存在冲突的情况,即对于同一个编码数值,在两种不同的编码方案中代表的是两个不同的字符。这样对于一些WEB应用来说,由于多种语言文字的同时使用及存储,需要采用一种统一的字符集。为此,国际标准化组织(ISO)制定了ISO 10646表,而Unicode协会制定了Unicode规范,这两个体系刚开始时是独立建立的,在1991年,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2006年的Unicode 5.0。ISO的最新标准是10646-3:2003。下面简单介绍一下几种常见的编码方式:
UCS(Universal Character Set)是按ISO-10646定义的字符集,有两种最常用编码方式: UCS-2和UCS-4。
UCS-2:使用0-65535之间的数表示一个unicode字符。UCS-2无法表示所有的unicode字符,只能表示其前65536个字符(称为Basic Multilingual Plane,BMP)。我们一般经常使用的UNICODE码就是指这个编码方案。
UCS-4:使用0-FFFFFFFF之间的数表示一个unicode字符,但为了和unicode体系兼容(unicode体系是一个20bit系统),ISO-10646表示所有定义的字符将不超过10FFFF。UCS-4可以表示所有的unicode字符。
Unix 下使用 UCS-2/UCS-4会导致非常严重的问题,因为有一些特殊的字符, 比如 ''\0'' 或 ''/'', 它们在文件名和其他C的库函数参数里都有特别的含义,C语言使用''\0''作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 。
为了解决这个问题,于是产生了将Unicode编码规则和计算机的实际编码对应起来的一个规则,UTF,英文为UCS Transformation Format,即UCS转换格式,目前常用的有UTF-8、UTF-16、UTF-32三种。(还有UTF-7在此就不介绍了)。正如名字所示,它们分别使用8位、16位、32位比特对UCS进行编码。
UTF-8:一种变长的Unicode编码方式,使用1到4个字节表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码作为它的一部分,因此在ASCII表示的128个字符在UTF-8的编码没有变化,它的兼容性比较好。UTF-8在目前WEB应用上使用很广泛。
UTF-16:一种变长Unicode编码方式,使用两个或者四个字节表示一个字符。这种编码方式比较节省空间,因为它把最常使用的字符都用两个字节来表示,而那些不常用的字节则用两个或四个字节来表示。但对于英文字符来说,它要用两个字节来编码。
UTF-32:一种固定长度的Unicode编码方式,使用四个字节表示一个字符,它适用在内存很充足,需要定长的编码场合。

分享到:
评论

相关推荐

    java字符集基础知识及问题

    本文主要介绍字符集编码基本知识,系统的介绍了字符集各种类型。 字符集常见问题和解决方案。

    字符集基础知识(描述解决java乱码问题的最详细的资料)

    以“中文”二字为例,详细的介绍了从java源文件,jsp页面到class文件,以及在web容器中编码解码的详细的具体的过程,只要深刻理解这篇文章,所有java乱码问题都将轻松解决。

    字符集学习总结

    学习字符集的一些问题及解决,还有一些关于字符集的基础知识的学习。

    Unicode 和字符集的最基础的知识

    Unicode 和字符集的最基础的知识

    Java Unicode 和字符集

    Java,每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识

    JAVA字符集.txt

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。

    循序渐进Oracle:数据库的字符集和字符集文件

    导读:本文来自『墨天轮』专栏“循序渐进Oralcle”(https://www.modb.pro/topic/6289,复制到浏览器中打开或者点击“阅读原文”)...这篇介绍第三章的3.1-3.4:字符集的基本知识、数据库的字符集、字符集文件及字符支

    java字符集

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e...

    【python入门必背】python入门基础知识点合集、python基础知识背记手册

    【python入门必背】python入门基础知识点合集、python基础知识背记手册 主要内容概要: 第1章 走进 Python. 第2章 Python语言基础 第3章 运算符与表达式 第4章 流程控制语句 第5章 列表与元组 第6章 字典与集合 第...

    字符集 字符编码的发展以及各种编码的含义用途

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码 sqlserver里面有char和nchar,那个...

    UNICODE 基础知识.pdf

    UNICODE 基础知识 Unicode.org 是一个国际性的组织,致力于使全球各种语言文字在计算机上使用统一的 编码。经过多年的发展,UNICODE 编码已经发展到了4.1 的版本。 1. 编码范围 早期的UNICODE 版本里,认为UNICODE ...

    C语言基础之转义字符:从原理到应用的字符编码教程 .txt

    本资源利用多个实例,如打印文件路径、输出控制字符、显示特殊字符等,展示了C语言转义字符的用法和作用,以及相关的概念和知识,如ASCII码、字符集、字符串等。本资源适合C语言教学和学习的教师和学生使用,帮助...

    关于二维码的一些基本知识

    在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的...

    C语言的基本知识(新手 问题)

    2.1 字符集和标识符 2.1.1 字符集 2.2 常量与变量 3.21数据类型

    JavaSE知识内容.xmind

    编码:编码字符集->中文->GB2312(中文的字符集)。菜单栏--------->编码--------->编码字符集-------->中文------------->GB2312(中文的字符编码)。 如果每次更改字符集麻烦:菜单栏--------->设置---------->首...

    [详细完整版]程序设计.doc

    课题: QBASIC的基本字符集和源程序结构 课时:9,10 授课类型:新授课 教学目标:1.使学生了解QBASIC的基本字符集。 2.使学生掌握QBASIC源程序的结构。 教学重点:QBASIC源程序的结构。 教学难点:QBASIC源程序的...

    中文编码基础知识介绍

    该书详细介绍了GB2312、GBK、BIG5、GB18030、UTF_8字符集等编码,为编码初学者提供了详细信息。

    python基础语法+核心知识点+面试集锦资源合集

    这是一个Python基础语法+核心知识点+面试集锦资源合集,适合学习知识点梳理,手边必备工具书,非常实用,通俗易懂,非常详细,需要的朋友可下载试试! Python内置对象类型:数字、字符串、列表、元组、字典、集合、...

    JSPServlet 中 字符编码问题

    其实 JSP/Servlet 的中文encoding 并没有想像的那么复杂,虽然定位和解决问题没有定规,...了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 java 编程,中文信息处理中的问题还是会存在一

    数据库基础知识.xmind

    里面包含了数据库介绍、专业术语、常用命令、字符集、sql类型、函数、视图、存储过程、等是非常详细的sql讲解

Global site tag (gtag.js) - Google Analytics