对于字符集,编码的问题, 一直都搞不太明白, 下面好好学习一下
一、什么是字符集?什么是编码?
字符(Character)是文字与符号的总称,包括文字(中文汉字, 英文字母)、图形符号、数学符号等。
一组抽象(可能按某一维度来区分不同的字符,比如按照语言,将字符分类,分为中文字符集、英文字符集)字符的集合就是字符集(Charset)。它是字符的集合,也可以理解为字符的分类,比如英文字符集、中文字符集等。
字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。
一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。
字符集的子集也是字符集。
计算机要处理各种字符,就需要将字符和二进制内码对应起来(因为计算机只能识别二进制),这种对应关系就是字符编码(Encoding)。
制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。
每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。
二、有哪些字符集?
ASCII:
American Standard Code for Information Interchange,美国信息交换标准码。
目前计算机中用得最广泛的字符集及其编码,由美国国家标准局(ANSI)制定。
它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。
ASCII字符集由控制字符和图形字符组成。
在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。
所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1。
偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
ISO 8859-1:
ISO 8859,全称ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准,现时定义了15个字符集。
ASCII收录了空格及94个“可印刷字符”,足以给英语使用。
但是,其他使用拉丁字母的语言(主要是欧洲国家的语言),都有一定数量的变音字母,故可以使用ASCII及控制字符以外的区域来储存及表示。
除了使用拉丁字母的语言外,使用西里尔字母的东欧语言、希腊语、泰语、现代阿拉伯语、希伯来语等,都可以使用这个形式来储存及表示。
*很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。
但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。
而且在很多协议上,默认使用该编码。
Unicode:
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。
它是http://www.unicode.org制定的编码机制, 要将全世界常用文字都函括进去。
Unicode只定义了什么字符对应的二进制是什么, 但是具体这个字符在计算机中占用多少个字节数, 并没有规定。
utf-8、utf-16是具体规定了占用多少个字节数
* UTF-8: 8bit变长编码,对于大多数常用字符集(ASCII中0~127字符)它只使用单字节,而对其它常用字符(特别是朝鲜和汉语会意文字),它使用3字节, 还有占用4个字节。
* UTF-16: 16bit编码,是占用定长字节数, 两个字节。
汉字编码:
* GB2312字集是简体字集,全称为GB2312(80)字集,共包括国标简体汉字6763个。
* BIG5字集是台湾繁体字集,共包括国标繁体汉字13053个。
* GBK字集是简繁字集,包括了GB字集、BIG5字集和一些符号,共包括21003个字符。
* GB18030是国家制定的一个强制性大字集标准,全称为GB18030-2000,它的推出使汉字集有了一个“大一统”的标准。
三、编程语言与编码
C、C++、Python2内部字符串都是使用当前系统默认编码
Python3、Java内部字符串用Unicode保存
Ruby有一个内部变量$KCODE用来表示可识别的多字节字符串的编码,变量值为EUC SJIS UTF8 NONE之一。
四、为什么会乱码?
乱码是个老问题,从上面我们知道,字符在保存时的编码格式如果和要显示的编码格式不一样的话,就会出现乱码问题。
我们的Web系统,从底层数据库编码、Web应用程序编码到HTML页面编码,如果有一项不一致的话,就会出现乱码。
所以,解决乱码问题说难也难说简单也简单,关键是让交互系统之间编码一致。
五、有没有万金油?
在如此多种编码和字符集弄的我们眼花缭乱的情况下,我们只需选择一种兼容性最好的编码方式和字符集,让它成为我们程序子系统之间
交互的编码契约,那么从此恼人的乱码问题即将远离我们而去 -- 这种兼容性最好的编码就是UTF-8!
毕竟GBK/GB2312是国内的标准,当我们大量使用国外的开源软件时,UTF-8才是编码界最通用的语言。
相关推荐
文档中主要介绍了各类字符集以及相关的字符编码,字符的显示原理,从输入到显现的整个过程,程序中出现的乱码问题以及解决方案
### 关于GBK和Unicode字符集转换乱码问题 在计算机科学与互联网技术中...通过正确理解字符集的原理、使用适当的工具和技术手段、以及严谨的测试流程,可以有效地避免和解决乱码问题,从而提高数据处理的准确性和效率。
了解字符集和字符编码有助于我们解决各种编码问题,如文件编码转换、网页显示异常等。在开发过程中,我们需要确保数据的输入、存储、传输和显示都使用相同的字符编码,以保证数据的一致性和正确性。同时,理解这些...
在实际开发中,理解字符集和编码对于解决乱码问题非常重要。当读取或写入文件时,如果文件的编码与程序中设置的编码不一致,就可能出现乱码现象。因此,正确设置文件的编码格式是非常重要的。例如,使用`...
《MySQL字符集与乱码问题分析》一文深入探讨了字符编码的历史背景、技术细节以及在MySQL中的应用,尤其...通过对字符集的深入了解,开发者能够更好地应对多语言环境中数据存储和显示的挑战,确保数据的准确性和一致性。
字符集与字符编码是计算机处理文字的基础,它们决定了如何用二进制表示各种语言的字符。在信息技术领域,理解和掌握字符集与字符编码至关...通过阅读这些文件,你可以进一步深入理解字符集和字符编码的概念及其应用。
3. 在使用字符集和编码时,需要注意它们的兼容性问题,比如在不同操作系统和软件之间可能会遇到字符显示不一致的情况。 五、参考资料 1. Unicode Consortium 维护 Unicode 标准,并发布最新的版本信息。目前(2015...
在深入探讨JAVA与字符集编码问题之前,我们首先需要理解不同字符集编码的基本概念以及它们在JAVA环境中的应用。字符集编码是计算机系统中表示文字的一种方式,它决定了如何将字符转换为二进制数据,以便于存储和传输...
在IT领域,数据库管理和数据传输过程中,字符集的匹配至关重要,尤其当涉及到...通过深入理解字符集的工作原理,结合适当的编程技巧和数据库特性,可以有效地解决因字符集不匹配引发的问题,确保数据的完整性和一致性。
本文旨在深入探讨与Java相关的字符集编码知识,包括但不限于编码的基本概念、几种常见的字符集编码类型及其特点,以及Java如何处理这些字符集编码问题。 #### 二、编码基本知识 1. **ISO 8859-1** ISO 8859-1是...
Oracle字符集专题是一个深入探讨Oracle数据库字符集配置、管理和常见问题解决的综合资源。这个专题涵盖了从基础概念到实际操作的多个方面,旨在帮助用户全面理解并有效处理与Oracle字符集相关的各种问题。 首先,...
在Oracle数据库管理中,字符集的设置至关重要,它直接影响到数据的存储、检索以及与之交互的准确性。...理解字符集的基本概念、掌握正确的修改流程,以及能够识别并解决潜在问题,是成功进行字符集调整的关键。
本文将深入探讨Oracle中的中文字符集问题,包括其基本概念、常见字符集类型以及如何在不同场景下正确配置和使用字符集。 #### 一、Oracle字符集概述 在Oracle环境中,字符集用于定义如何表示和存储字符数据。一个...
Oracle字符集是数据库管理...总结,Oracle字符集是数据库管理的关键部分,理解和正确配置字符集能确保数据的准确性和系统的稳定性。在实际操作中,需根据具体需求选择适当的字符集,并注意字符集变更可能导致的风险。
在 SQL SERVER 中,字符集问题是一个复杂的问题,需要深入了解字符集的原理和应用。同时,需要了解数据库设计和优化的原则,以便更好地解决数据库问题。 七、参考文献 1. SQL SERVER 官方文档 2. DATABASE DESIGN ...
Oracle 字符集是数据库系统中一个至关重要的概念,它...正确选择和配置字符集可以确保数据的准确性和兼容性,避免字符乱码或数据丢失的问题。在进行数据库迁移或跨语言环境操作时,对字符集的深入理解更是必不可少。
在深入探讨修改字符集的方法之前,我们首先需要了解MySQL中的字符集概念。字符集是指一系列字符及其编码方式的集合。在MySQL中,常用的字符集有`latin1`、`utf8`等。其中: - **`latin1`**:支持西欧语言,占用一个...
- 在设置字符集时,应确保服务器端、客户端和数据库级别的字符集保持一致,避免出现乱码问题。 - 当涉及到跨语言的数据处理时,需要特别注意字符集转换的规则,以确保数据的正确性。 - 在进行大规模数据迁移时,应当...
GBK同样采用双字节编码,其编码范围涵盖了GB2312的所有字符,并扩展到了高位字节的0x81到0xFE和低位字节的0x40到0xFE,这使得GBK可以容纳更多字符,解决了GB2312字符集不足的问题。 在实际应用中,GB2312通常用于...
首先,让我们理解字符集编码的基本概念。常见的字符集编码有ASCII、GB2312、GBK、UTF-8、UTF-16等。ASCII是最基础的7位编码,只能表示128个基本的英文字符。GB2312和GBK是中国常用的简体中文编码,它们包含了大量的...