一、字符编码简介
人类的文字字符编码是通过一套法则将自然语言的字符与计算机认识的0和1字符进行配对的过程。这个过程需要使用字符编码规则来转换人类的文字字符为计算机能够识别的01字符。
字符编码规则是一套法则,它将自然语言的字符集(如字母表或音节表)与其他东西的集合(如号码或电脉冲)进行对应。类似于摩尔斯电码,上个世纪60年代,美国制定了一套字符编码规则,称为ASCII码,用于表示英语字符与二进制位之间的关系,并且至今仍在使用。
然而,由于ASCII码只包含128个字符,无法表示世界上其他许多文字,因此需要更全面的字符编码。于是,Unicode字符集出现了(常见的编码方式有UTF-7、UTF-8、UTF-16和UTF-32),它可以表示全球范围内的各种文字。此外,还有一些常用的中文编码方式,如GBK、GB2312和GB18030。
通过使用Unicode和其他编码方式,人类的文字可以被准确地转换成计算机认识的01字符,从而在计算机系统中进行处理和显示。这样,不同语言和文字的信息可以在计算机系统中得到正确地表示和传输。
二、Unicode 和 UTF-8的关联
Unicode是计算机科学领域的一项业界标准,用于整理和编码世界上大部分的文字系统,使计算机能够以简单的方式处理和呈现文字。它被广泛应用于计算机软件的国际化与本地化过程,包括可扩展置标语言(XML)、Java编程语言和现代操作系统。
Unicode是一个通用的字符集,包含世界上大部分的文字,可以表示中文等各种字符。然而,Unicode并没有规定字符如何存储。如果Unicode规定每个字符都用三个或四个字节来表示,由于字符数量庞大,文本文件的大小将大大增加,造成存储浪费。
为了解决这个问题,出现了一些中间格式的字符集,称为通用转换格式(UTF)。常见的UTF格式有UTF-7, UTF-7.5, UTF-8, UTF-16和UTF-32。
- UTF-8使用一至四个字节编码每个字符。
- UTF-16使用二或四个字节编码每个字符。
- UTF-32使用四个字节编码每个字符。
以上是对Unicode和其相关的字符编码格式的说明。
三、有了UTF-8,为什么要出现GBK
对于首先纳入的文字,可以优先使用1字节或2字节进行存储;而对于后纳入的文字,则需要使用3字节或4字节进行存储。
当使用UTF-8编码时,每个字符的存储空间取决于字符的Unicode码点。✨对于常见的汉字,UTF-8编码使用3个字节进行存储。然而,如果我们只需要包含中文和ASCII字符的编码,可以采用一种只使用2个字节的编码方式,从而减少存储空间的需求。✨
当使用UTF-8编码时,常见的汉字使用3个字节进行存储。例如,汉字"你"的UTF-8编码是E4 BD A0。
然而,如果我们只需要包含中文和ASCII字符的编码,可以采用一种只使用2个字节的编码方式,例如GB2312或GBK编码。举个例子,汉字"你"在GBK编码中的存储方式是C4 E3。
通过采用只使用2个字节的编码方式,相比于UTF-8编码,可以减少每个汉字的存储空间,从而节省存储空间的需求。
对于大部分只服务一个国家或地区的网站来说,比如一个中国的网站,一般只会包含简体字、繁体字和一些英文字符,很少会包含日语或韩文等其他语种的字符。
考虑到这一点,中国国家标准总局于1981年制定并实施了GB 2312-80编码,即中华人民共和国国家标准管本中文字符集。后来,微软利用GB 2312-80未使用的编码空间,收录了GB 13000.1-93中的全部字符,制定了GBK编码。
通过采用标准中文字符集,如果一个网站只包含纯中文内容,可以使用这种编码方式,从而大大节省存储空间。上述文字经过润色后如下:
对于只包含中文和ASCII字符的网站,可以采用一种只使用2个字节的编码方式,例如GBK编码。这种方式可以节省存储空间,适用于服务一个国家或地区的网站。
🎉常见的中文编码有GBK、GB2312和GB18030,其中最常用的是GBK。🎉
GBK编码的优点:
- 适用于简繁中文共存的环境,可以在简体Windows系统中广泛使用。
- 向下完全兼容GB2312,向上支持ISO-10646国际标准,可以一对一映射到Unicode 2.0上。
GBK编码的缺点:
- 不属于官方标准,与Big5编码需要进行转换,不够统一。
- 很多搜索引擎对GBK汉字的支持不够好,可能会出现乱码或无法识别的情况。
GB2312编码的优点:
- 适用于简体中文环境,是中国的国家标准,在大陆和新加坡等地通行。
- 编码字符集收录了大约6700个常用简体汉字,足够满足一般的中文文字需求。
GB2312编码的缺点:
- 不兼容繁体中文,无法显示繁体字,限制了在繁体中文环境下的使用。
- 汉字集合较少,无法满足一些特殊或罕见汉字的需求。
GB18030编码的优点:
- 收录了大量汉字,包括了简体、繁体,以及一些少数民族文字,几乎可以收录所有你能想到的文字和符号。
- 是中国最新的国家标准,具有较高的完整性和权威性。
GB18030编码的缺点:
- 目前支持它的软件较少,可能会导致在某些软件或系统中无法正常显示或处理GB18030编码的文本。
- 由于编码字符集更大,文件大小会比GBK和GB2312编码的文件更大,可能会增加存储和传输的负担。
总体而言,GBK编码是最常用的中文编码,适用于简繁中文共存的环境,而GB2312编码适用于简体中文环境,GB18030编码收录了更多的汉字和符号,但支持较少。选择使用哪种编码应根据实际需求和兼容性考虑。
四、出现乱码的原因
文件中的内容实际上是由二进制码组成的,不同的字符编码标准规定了如何将这些二进制码转换成可读的字符串。在这种情况下,我们假设原始文本使用UTF-8编码传输,然后被错误地用GBK进行解码导致乱码。
“将一串中文字符使用UTF-8进行编码传输给别人,当别人接收到这串文字后,错误地使用GBK进行解码,得到的内容会变成“银届萦银斤拷零银斤拷直银斤拷银”,这就是乱码。
✨乱码举例:✨
中国人(使用中文):我喜欢吃饺子。
美国人(使用英文):I like dumplings.
如果这段文字使用错误的字符编码标准进行解码,就会导致乱码。假设中国人将中文句子使用UTF-8编码发送给美国人,但美国人错误地使用了ISO-8859-1进行解码,以下是解码后的乱码示例:
中国人发送的中文(UTF-8编码):我喜欢åƒé¥ºå。
美国人错误解码后的乱码(ISO-8859-1解码):我喜欢åƒé¥ºå。
在这个例子中,由于美国人错误地使用了ISO-8859-1进行解码,导致中文字符无法正确显示,出现了乱码。正确的解码方式应该是使用UTF-8,这样才能正确显示中文字符。
五、总结
常见的字符编码包括UTF-8、UTF-16、UTF-32、ISO-8859-1(也称为Latin-1)、GBK等。它们之间的区别主要在于编码方式和所能表示的字符范围。
🎆UTF-8是一种变长编码🎆,对于ASCII字符使用1个字节进行编码,对于其他字符使用2到4个字节进行编码。它是Unicode的一种实现方式,能够表示几乎所有的字符。
✨UTF-16是一种固定长度编码✨,对于大部分常用字符使用2个字节进行编码,对于辅助字符使用4个字节进行编码。它也是Unicode的一种实现方式,可以表示几乎所有的字符。
🎉UTF-32是一种固定长度编码🎉 ,对于所有字符使用4个字节进行编码,能够表示所有Unicode字符。
🎊ISO-8859-1(也称为Latin-1)🎊 , 是一种使用一个字节表示一个字符的编码方式,主要用于欧洲语言中的字符,无法表示其他语言的字符。
🎃GBK是一种中文字符编码方式,它使用1个或2个字节来表示中文字符,能够表示大部分中文字符。🎃
🎈需要根据具体的要求和场景选择合适的字符编码方式。🎈