1. 字符(character):字符是各种文字和符号的总成,包括各国家文字,标点符号,图形符号,数字等。
2. 字符集(character set):字符的集合,比如说,ASCII字符集,GB2312字符集,BIG5字符集,Unicode字符集
3. 字符编码(characer encoding): 为了使计算机识别字符集并进行处理,需要对字符集进行编码,而编码形式就称为character encoding
比如经典的莫尔斯编码(Morse code)就是一种字符编码方案
从编程的角度看,字符编码集合其实就是key-value集合,例如在ASCII编码方案中,
key --> value
0x61 --> a
在GB2312编码方案中,
key --> value
0xa3e1 --> a(全角字母a)
ucs标准
unicode是国际标准组织制定的,包含所有符号的编码方案,这么做的一个好处是可以很方便的解决乱码问题,比如一个韩文的网页,如果使用utf8编码,那么在其他语言系统上打开网页,也能正确显示韩文。
ucs = unicode character set,ucs有两种格式,ucs-2和ucs-4,ucs-2意思就是用两个字节对字符进行编码,而ucs-4则用4个字节对字符进行编码,因此可以得出
对于ucs-2,最多可以表示2^16 = 65536个字符
对于ucs-4,最多可以表示2^31 = 2147483648个字符(实际只用了31位,最高位规定为0)
而目前来说,ucs-2已经能满足大部分的需求了,对于类似英语的语言,需要编码的只是几十个字母和一些符号而已,而对于中文,则需要多一点码位了,常用的中文汉字只有4000多个,但是完整的中文字符估计有40000个以上,所以实际上,ucs-2只包含了常用的汉字。ucs-2把CJK(中日韩)字符一起放在了0x4E00 - 0x9FCB区间(unicode 6.0标准)。
ucs-2的字符编码表可以在unicode官网上找到
http://www.unicode.org/charts/
utf-8
ucs只规定了如何用多个字节来表示字符,并没有规定传输和存储,就比如说某个标准规定用7位来表示一个字符,但是并没有指定怎样的7位,所以可以有各种实现:一个字节的低7位,高7位,两个字节取前一个字节后4位和后一个字节后3位等。所以,UTF-8只是对ucs2规定的65536个字符进行编码的一种方案
utf-8编码方案采用1-3个字节来对ucs2进行编码,编码规则如下
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
0000-007F是ASCII字符集的范围,因此采用UTF-8编码方案,表示一个ASCII字符只需要一个字节,而上面提到CJK的unicode范围所0x4E00 - 0x9FCB,所以表示一个中文汉字需要3个字节,utf8的字节流形式只有这三种,所以可以通过这三种形式对字节流进行校验,以判断是否是合法的utf8字节流。但要注意合法并不代表就是utf8编码的字节流。
gb2312编码
一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。
GBK编码
只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容
----
表达不是很好,有不正确的请指出
参考资料
http://www.kuqin.com/language/20080507/8129.html 谈谈Unicode编码
http://www.kuqin.com/language/20080507/8130.html 字符编码笔记:ASCII,Unicode和UTF-8
http://www.iteye.com/topic/398782 说说字符集和编码
http://www.unicode.org/charts/ Unicode 6.0 Character Code Charts
分享到:
相关推荐
Mysql字符集编码详解 Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何...
字符集编码是计算机科学中的一个重要概念,涉及到数据的存储、传输和显示。在这个"字符集编码查询/反查工具"中,我们可以看到涉及到的关键技术包括字符集、二进制、十六进制、Base64以及URL编码。这些知识点在信息...
字符集与字符集编码简介 我们知道,计算机只能识别诸如0101这样的二进制数,于是人们必须以二进制数据与计算机进行交互,或者先将人类使用的字符按一定规则转换为二进制数。 那什么是字符呢?在计算机领域,我们把...
在IT领域,字符集编码是处理文本数据时一个至关重要的概念。不同的编码方式决定了如何将字符映射到二进制表示,以及如何从二进制还原出字符。Qt是一个跨平台的应用程序开发框架,它提供了丰富的API来处理各种编码...
### Java字符集编码问题详解 #### 一、引言 在Java编程中,字符集编码问题是一个常见且重要的议题。由于不同的系统、平台以及网络环境中可能存在多种字符编码格式,这导致了在处理文本数据时可能会遇到编码不一致...
JAVA及相关字符集编码问题 在深入探讨JAVA与字符集编码问题之前,我们首先需要理解不同字符集编码的基本概念以及它们在JAVA环境中的应用。字符集编码是计算机系统中表示文字的一种方式,它决定了如何将字符转换为二...
### Java字符集编码乱码详解 #### 一、编码与乱码基础知识 在计算机科学领域,字符集(Character Set)是指一系列符号和电子通信代码的标准集合。每种字符集都有其特定的应用场景和优势。例如,ASCII(American ...
字符集编码是信息处理领域的一个基本技术,它涉及将自然语言中的字符集合与数字系统之间建立对应关系,从而使得计算机可以处理和存储文本信息。字符集是系统支持的所有抽象字符的集合,这些字符包括各国文字、标点...
在Java编程语言中,理解和掌握字符集编码是至关重要的,特别是在处理各种文本数据时。本文主要探讨了编码字符集和字符集编码的区别,这对于软件开发人员来说是基础且必要的知识。 首先,我们要区分两个概念:编码...
Linux 字符集编码转换 Linux 字符集编码转换是一个非常重要的概念,在 Linux 操作系统中,字符集编码转换是必备的知识。本文将从基础概念开始,逐步引导读者了解字符集编码转换的相关知识。 首先,让我们了解什么...
在IT行业中,字符集编码是基础且至关重要的概念,尤其对于Java开发者来说,理解编码机制是处理各种文本数据的关键。本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,...
标题中的“字符集编码的识别”是一个关于计算机科学和编程的重要主题,主要涉及文本数据在计算机内部的表示方式。字符集编码是将字符与二进制数字之间建立映射关系的一种方法,使得计算机能够理解和处理各种语言的...
在描述中,“编码转换工具 字符集编码对比字符集编码对比字符集编码对比”重复强调了编码对比这一功能,可能意味着此工具具有深度解析和展示编码差异的能力。 字符集,简单来说,是定义一组特定字符的集合,比如...
### GBK字符集编码表详解 #### 一、概述 GBK是中文内码扩展规范,是一种简体中文字符集编码方案。它是在GB2312的基础上进行扩展,增加了对更多的汉字以及符号的支持,旨在更好地满足中文信息化处理的需求。本文将...
在IT领域,尤其是在软件开发和系统集成中,字符集编码的转换处理是一项至关重要的技术,尤其是在全球化的背景下,数据在不同系统、不同平台之间传输时,由于字符编码的不同,经常会出现乱码问题。本文将围绕“不同...
字符集编码转换工具是计算机领域中用于处理不同字符编码之间转换的一种实用软件。在信息化社会,数据交流频繁,各种文本文件、网页等都需要在不同的系统和平台间传递,而这些系统可能采用不同的字符编码标准,这就...
常用字符集编码详解 本文将详细介绍常用的字符集编码,包括 ASCII、GB2312、GBK、GB18030、Unicode 和 UTF-8 等。 一、ASCII 码 ASCII 码是 7 位编码,编码范围是 0x00-0x7F。ASCII 字符集包括英文字母、阿拉伯...