写道
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
下面,还是以汉字“严”为例,演示如何实现UTF-8编码。
已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
下面,还是以汉字“严”为例,演示如何实现UTF-8编码。
已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
开始看例子的时候,并不理解为什么4E25处在第三行的位置。因为把“0000 0080-0000 07FF”这个给弄拧了,没有看懂这个表示的意思。这是一个范围的表示,意思是当Unicode编码的值在“0000 0008”到“0000 FFFF”之间的时候,采用第三行的编码。4E25显然在这个范围中;这是正确的理解。
当时我并没有理解,于是进行了反推。将4E25表示成二进制数,即“0100 1110 0010 0101”。它有十六位,与此同时,第三行的可变的二进制位,也恰好是16个。看来问题就在这里, Unicode的表示范围和表示成二进制后的UTF-8编码的可变长度是相匹配的。比如,对于“0000 0000”到“0000 007F”范围的Unicode,最多只有7个有效二进制位,所以加上一个标识符,刚好可以在一个字节中进行表示;而对于第三行的UTF-8编码,它能容纳的可变二进制位是16个,所以能表示的最大Unicode码是“0000 FFFF”。
按照这个规则,当然可以一直表示下去,但是对于一个字符,最多4个字节就可以了,所以没有必要继续扩展了。
相关推荐
**标题:**UNICODE与UTF-8转换 **正文:** 在计算机科学中,字符编码是用于表示文本的一种方式,特别是在计算机系统中。UNICODE和UTF-8是两种广泛使用的字符编码标准,它们各自有着独特的特性和应用场景。本文将...
"字符集Unicode与UTF-8之间的转换" 在计算机科学中,字符集和编码方式是非常重要的概念,特别是在多语言环境中。...通过本文的介绍,读者可以更好地理解Unicode和UTF-8的区别和转换方法,并在实际开发中应用这些知识。
"CharsetConv"类提供了一个工具,帮助开发者在ANSI、Unicode(Little Endian和Big Endian)、UTF-8及UTF-8+BOM之间灵活转换,从而避免编码问题带来的困扰。通过深入学习和实践,开发者可以更好地应对各种编码挑战,...
在编程领域,尤其是在涉及到字符编码的时候,理解和操作UTF-8和UTF-16之间的转换是一项基本技能。UTF-8和UTF-16是两种广泛使用的Unicode编码格式,它们各自有其特性和应用场景。本文将深入探讨如何利用C++来实现这两...
总之,理解和实现Unicode到UTF-8的转换是提升C++编程能力的一个重要方面。这个过程涉及字符编码理论和实践,对于理解和处理各种编码问题具有深远的意义。通过不断实践和研究,你将能够熟练地处理各种字符编码问题,...
在VB6.0编程环境中,有时我们需要处理不同字符编码之间的转换,例如将UTF-8编码的字符串转换为GB2312编码。UTF-8是一种广泛使用的Unicode编码,而GB2312是中国大陆常用的简体中文字符集,主要用于早期的计算机系统。...
在C语言中,由于没有内置的GBK或UTF-8转换函数,我们需要自定义算法来实现编码转换。主要的过程可以分为两个步骤:首先从GBK转换到Unicode,然后从Unicode转换到UTF-8。 1. GBK转Unicode: - GBK编码中,每个字符...
总的来说,理解和掌握UTF-8和GBK这两种编码格式的特性以及如何在LabVIEW中进行转换,对于进行多语言编程和数据交换的开发者来说至关重要。"UTF-8toGBK.vi"这个VI提供了一个实用的工具,可以帮助开发者解决在处理中文...
"UTF-8转ANSI文本文件转换器"就是这样一个工具,它能够帮助用户批量将UTF-8编码的文本文件转换为ANSI编码的文本文件。在此,我们将深入探讨UTF-8和ANSI编码的原理以及转换过程中涉及的关键知识点。 **一、UTF-8编码...
如果想要使用这些函数,需要先将UTF-8转换为宽字符,然后再进行操作。 5. 使用第三方库: 对于更复杂的UTF-8操作,可以考虑使用第三方库,如libiconv、ICU或Boost.Locale,它们提供了更完善的Unicode和编码转换...
总之,C语言虽然没有内置的字符编码转换机制,但通过理解不同编码的原理和使用适当的库或API,可以实现UNICODE、GBK和UTF-8之间的转换。在进行这样的编程时,确保充分理解字符编码的细节,以及处理异常情况的方法,...
在这个例子中,`Encoding.GetEncoding("GBK")`获取了GBK编码器,`GetBytes()`方法将GBK编码的字符串转换为字节数组,然后`Encoding.UTF8.GetString()`将这个字节数组还原为UTF-8编码的字符串。 对于文件的编码转换...
4. **国际化和本地化**:如果你的程序需要支持多种语言,那么处理UTF-8就显得尤为重要,因为它能表示所有Unicode字符,包括非拉丁语系的字符。 5. **文件I/O**:当读写文件时,确保文件以UTF-8编码打开,这样可以...
在IT行业中,理解和使用UTF-8编码是非常基础且重要的知识。 1. **Unicode与UTF-8**: Unicode是一个国际字符集,包含了世界上几乎所有的文字系统,包括拉丁文、汉字、阿拉伯文、希伯来文等。UTF-8是Unicode的一种...
本文将详细介绍Unicode、ISO-8859-1、GBK和UTF-8这四种常见的字符编码,并探讨它们之间的转换方法。 #### 二、基础知识 ##### 1. Unicode Unicode是一种国际字符编码标准,旨在支持世界上几乎所有语言的文字。它为...
总的来说,GB2312和UTF-8都是字符编码的重要形式,理解它们的区别和转换方法对于处理中文文本至关重要。正确地进行编码转换有助于确保信息的准确传递和兼容性,避免因编码不匹配而产生的乱码问题。
ASCII 和 UTF-8 是两种广泛使用的字符编码标准,它们在计算机...了解它们之间的差异和转换方法,对于理解和处理各种文本数据至关重要。在处理涉及不同编码格式的数据时,需要谨慎操作,以确保信息的准确性和可读性。
总结来说,理解和掌握UTF-8与ANSI字符编码的差异,以及如何进行转换,对于解决跨平台、多语言环境下的文本处理问题至关重要。在日常工作中,我们可以利用各种工具和编程手段,灵活应对不同编码格式带来的挑战。在...
标题中的“pb12 gb转utf-8”指的是在编程领域中进行的一种字符编码转换操作。PB12可能是指PowerBuilder 12,一个流行的Windows应用程序开发工具,而GB和UTF-8则涉及到字符编码标准。 GB(通常指的是GBK或GB2312)是...
本篇文章主要探讨的是多字节(MBCS)编码与UTF-8、Unicode编码之间的转换方法,并深入分析了给定代码片段中的六个函数实现细节。 #### 一、基础知识概述 1. **多字节字符集(MBCS)**:多字节字符集是指非固定长度...