我们知道,所有在计算机上看到的文本,图像,音乐都是以字节流的形式存放在硬盘上或在网络上传输的。我们把前者转化为后者的过程称为编码(Encoding),反之则为解码(decoding)。相比于图像,音乐而言,对文本的编码相对简单的。实际上,一段文字就是一个字符串String,它是由一系列的字符(Character)组成。对其编码就是将每个字符映射为一个数字。这种编码方式看起来不复杂,但是映射方式可以有很多种。在Unicode出现之前就已经有了很多的字符集,包括我们熟悉的ASCII,GBK,BIG5。正是大量不同字符集的存在带了一个我们经常听到的问题:乱码。所谓乱码就是decoding和encoding使用的字符集不兼容,导致一些字符没有被正确的解析。再进一步讨论这个问题之前,首先要引入几个概念:
-
Character Repertoire
定义了其所支持的所有抽象字符的全集。比如说可以为所有英文字母,数字以及简单的符号定义一个Repertoire。
- 在定义了一个Character Repertoire
之后,我们就需要赋予其中每个字符单位一个唯一的大于0的Code Point。在完成这样的映射之后,我们就创建了一个Coded Character Set
(字符集)。比如说,我们所熟悉的ASCII字符集一个有127个字符,其对应的编码也就是从1到127中。而Unicode定义的这个集合就要大得多,目前5.2版本包括107,361个字符。理论上,它可以定义1,114,112个字符(0 - 0x10FFFF)。为了方便管理和扩展性,这个范围给划分成若干段,每段用来表示不同种类的字符。
- 接下来,Character Encoding Scheme
(字符编码)就会用来指定如何把每个字符的code point映射为可以传输的字节序列。常见的基于Unicode的编码方式有UTF-8,UTF-16和UTF-32。其中, UTF-8的最大的优点就是它能够向前兼容ASCII编码,因为这个原因,它就成为了目前最为流行的编码方式。
继续我们的讨论。为了避免出现乱码,我们必须要在解码之前知道这个字符流使用的编码。HTML和XML采取了定义元数据的方法。所谓元数据,是指数据的属性,而数据的编码正是其中的一种。在HTML中,我们可以在head元素中加入这一行来指定解析这一网页要使用的编码:<meta http-equiv="content-type content-type="text/html;charset=UTF-8" />。当然,除此以外,我们也可以在HTTP响应头中使用content-type来指定相同的信息,这种方法具有更高的优先级。而对于XML文件而言,你所需要做的就是在文件的第一行指定<?xml version="1.0" encoding="UTF-8" ?>。
分享到:
相关推荐
总结来说,UNICODE和UTF-8在字符编码领域各有其特点和优势,理解它们之间的关系和转换方法,对于进行跨语言的软件开发和数据处理至关重要。通过有效的转换,我们可以确保不同编码系统之间的文本数据能够正确无误地...
ASCII、Unicode和UTF-8是字符编码的几种不同标准,它们在历史发展中各司其职,具有各自的特点和用途。了解这三者之间的区别和联系,对于处理多语言文本数据尤为重要。 首先,让我们回顾一下ASCII编码标准。ASCII...
lvgl unicode 转 utf-8小工具
Unicode --> UTF-8 UTF-8 --> ANSI UTF-8 --> Unicode UTF-8 --> Unicode big endian ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不转换 utf8转别的,首先检验BOM,不...
"字符集Unicode与UTF-8之间的转换" 在计算机科学中,字符集和编码方式是非常重要的概念,特别是在多语言环境中。...通过本文的介绍,读者可以更好地理解Unicode和UTF-8的区别和转换方法,并在实际开发中应用这些知识。
unicode -> utf-8 utf-8 -> unicode 国际化必备工具
"CharsetConv"类提供了一个工具,帮助开发者在ANSI、Unicode(Little Endian和Big Endian)、UTF-8及UTF-8+BOM之间灵活转换,从而避免编码问题带来的困扰。通过深入学习和实践,开发者可以更好地应对各种编码挑战,...
### 字符编码笔记:ASCII,Unicode和UTF-8 #### 1. ASCII码 ASCII码是上个世纪60年代由美国制定的一套字符编码标准,用于规定英语字符与计算机内部二进制位之间的关系。在计算机内部,信息通常以二进制形式存在,...
Unicode是一种通用的字符集,它包含了世界上几乎所有的字符和符号,而UTF-8是Unicode的一种广泛使用的编码方式。 Unicode是一个标准化的编码系统,其目标是为所有已知的字符提供一个唯一的数字表示,称为码点(Code...
4. **国际化和本地化**:如果你的程序需要支持多种语言,那么处理UTF-8就显得尤为重要,因为它能表示所有Unicode字符,包括非拉丁语系的字符。 5. **文件I/O**:当读写文件时,确保文件以UTF-8编码打开,这样可以...
首先,我们需要了解Unicode和UTF-8的关系。Unicode是一个字符集,包含世界上几乎所有的文字系统,而UTF-8是Unicode的一种编码方式。在UTF-8编码中,每个字符可能由1到4个字节组成,根据字符的不同范围来确定字节数。...
UTF-8的优势在于对ASCII字符集的兼容性,前128个Unicode字符(包括英文、数字和常见符号)只需要一个字节表示,这使得UTF-8在互联网上广泛使用,因为其与ASCII的兼容性可以减少传输数据量。此外,UTF-8也支持全球大...
字符编码笔记:ASCII、Unicode 和 UTF-8 本文主要介绍了字符编码的基本概念和历史发展过程,包括 ASCII 码、Unicode 和 UTF-8 的编码原理和特点。文章首先介绍了 ASCII 码的历史和编码原理,然后讨论了非 ASCII ...
### UTF-8、Unicode、GBK、GB2312 编码之间的区别和联系 #### 一、引言 在互联网技术中,字符编码是非常重要的基础概念之一。字符编码不仅决定了文本在网络上的传输效率,还直接影响到了不同国家和地区用户访问...
在Linux C编程中,字符编码主要涉及Unicode和UTF-8标准。Unicode是一个广泛采用的字符集,它包含世界上几乎所有的文字系统,而UTF-8是Unicode的一种编码方式,具有良好的向后兼容性和易于处理的特性。 UTF-8编码在...
本文将详细介绍Unicode、ISO-8859-1、GBK和UTF-8这四种常见的字符编码,并探讨它们之间的转换方法。 #### 二、基础知识 ##### 1. Unicode Unicode是一种国际字符编码标准,旨在支持世界上几乎所有语言的文字。它为...
UTF-8和UTF-16是两种广泛使用的Unicode编码格式,它们各自有其特性和应用场景。本文将深入探讨如何利用C++来实现这两种编码格式之间的转换,并讨论在转换过程中可能遇到的错误处理问题。 首先,让我们了解一下UTF-8...
ASCII、Unicode和UTF-8是计算机世界中处理字符编码的三种重要标准,它们各自有着不同的历史背景和设计目的,对于理解和处理多语言文本至关重要。 首先,ASCII(American Standard Code for Information Interchange...
不同的字符编码标准有着各自的特点和应用范围,其中“GB2312”、“Unicode”和“UTF-8”是三种常见的编码格式,它们在中文环境下尤其重要。接下来,我们将深入探讨这三种编码格式及其相互转换。 **GB2312编码** GB...
字符编码是计算机处理文本的关键...总结来说,ASCII、Unicode和UTF-8编码分别代表了从基础的英文字符集到全球多语言字符集的演进,并通过UTF-8实现了一种高效且兼容的编码方式,使得现代计算机能够处理各种语言的文本。