`
ywg2008
  • 浏览: 46474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

字符编码(转)

阅读更多
  • 计算机只有数字,计算机软件里的一切都是用数字来表示的,屏幕上显示的一个个字符也不例外。
  • 字符a对应数字97,字符b对应数字98等,这种字符与数字对应的编码规则被称为ASCII(美国标准信息交换码)。ASCII的最高bit位都为0,也就是说这些数字都在0到127之间。
  • 中国大陆将每一个中文字符都用两个字节的数字来表示,中文字符的每个字节的最高位都为1,中国大陆为每个中文字符制定的编码规则称为GB2312(国标码)。
  •  在GB2312的基础上,对更多的中文字符(包括繁体)进行了编码,新的编码规则称为GBK。
  • 在中国大陆使用的计算机系统上,GBK和GB2312就被称为该系统的本地字符集。
  • “中国”的“中”字,在中国大陆的编码是十六进制的D6DO,而在中国台湾的编码是十六进制的A4A4,台湾地区对中文字符集的编码规则称为BIG5(大五码)。
  • 在一个国家的本地化系统中出现的一个字符,通过电子邮件传送到另外一个国家的本地化系统中,看到的就不是那个字符了,而是另个那个国家的一个字符或乱码。
Unicode编码(是一种全球通用的字符编码)
  • ISO(国际标准化组织)将全世界所有的符号进行了统一编码,称之为Unicode编码。
  • “中”这个符号,在全世界的任何角落始终对应的都是一个十六进制的数字4E2D。
  • 如果所用的计算机系统都使用Unicode编码,在中国大陆的本地化系统中显示的“中”这个符号,发送到伊拉克的本地化系统中,显示的仍然是“中“这个符号。
  • Unicode编码的字符都占用两个字节的大小,对于ASCII码所表示的字符,只是简单地在ASCII码原来占用的一个字节前面,增加一个所有bit为0的字节。
  • Unicode只占用两个字节,在全世界范围内所表示的字符个数不会超过2的16次方(65536),实际上,Unicode编码中还保留了两千多个数值没有用于字符编码。
  • 在相当长的一段时期内,本地化字符编码将与Unicode编码共存。
  • Java中的字符使用的都是Unicode编码,Java在通过Unicode保证跨平台特性的前提下,也支持本地平台字符集。
UTF-8编码
 
ASCII码字符保持原样,仍然只占用一个字节,对于其它国家的字符,UTF-8使用两个或三个字节来表示。使用UTF-8编码的文件,通常都要用EF BB BF作为文件开头的三个字节数据。

字符的UTF-8编码与Unicode编码之间的转换关系对应下列规则:
      -  \u0001和\u007f之间的字符,UTF-8编码为:(byte)c.
      -  \u0000或其范围在\u0080和\u07ff之间的字符,UTF-8编码为:
              (byte)(0xc0|(0x1f&(c>>6))),(byte)(0x80|(0x3f&c)).
      -  \u0800和\uffff之间的字符,UTF-8编码为:
              (byte)(0xe0|0x0f&(c>>12)))),(byte)(0x80|(0x3f&(c>>6))),(byte)(0x80|(0x3f&c))

编码
从上图可以看出,应用程序软件很容易根据UTF-8编码中那些固定不变的比特值来确定一个字符占用的是一个字节呢,还是两个或是三个字节的,如果一个字节的第一个比特位为“0”,那么说明这个字符只占用一个字节;如果一个字节的前三个比特为“110”,这说明这个字符占用两个字节;如果一个字节的前四个比特为“1110”,这说明这个字符占用三个字节。对于需要二个或三个字节表示的UTF-8字符,它们的第二个和第三个字节的前两个比特位总是“10”。这样很容易与UTF-8中只占用一个字节的字符相区分,非常便于应用程序检测数据在传输过程中是不是发生了错误。

相对Unicode编码,UTF-8有一些显著的优点:
  • 不出现内容为0x00字节(字节内容全为“0”)
  • 便于应用程序检测数据在传输过程中是否发了错误
  • 直接处理使用ASCII码的英文文档
UTF-8的缺点:
  • 其中有些字符需要使用三个字节,是Unicode编码的1.5倍,由其是对中日韩字符如此
使用UTF-8编码的文件,通常都要用EF BB BF作为文件开头的三个字节数据。
 
UTF-16编码(两个字节或四个字节)
  • UTF-16编码在Unicode基础上进行了一些细节上的扩充,增加了对Unicode编码没有包括的那些字符的表示方式。
  • UTF-16对Unicode的扩充并没有影响Unicode编码所包括的那些字符,只是增加了对Unicode编码没有包括的那些字符的表示方式,一个使用Unicode编码的字符就是UTF-16格式的。
  • Unicode编码将OXD800-0XDFFF区间的数值保留出来,UTF-16扩充的字符,占用四个字节,前面两个字节的数值为OXD800-OXD8FF之间,后面两个字符的数值为OXDC00-OXDFFF之间。
  • 为什么不让前面和后面的两个字节的数值都位于0XD800-OXDFFF之间呢?方便用于判断字符的边界。
  • 在不同体系结构的计算机系统中,UTF-16编码的Unicode字符在内存中的字节存储顺序不同。
  • 对于0X1234这样的一个双字节数据,使用Little-Endian和Big-Endian两种方式在内存中存储的格式,如图所示:
  • 如果文件以OXFF OXFF这两个字节开头,则表明文本的其余部分是Big-Endian的UTF-16编码;如果文件以OXFF OXFE这两个字节开头,则表明文本的其余部分是Little-Endian的UTF-16编码。
分享到:
评论

相关推荐

    字符编码过滤器 字符编码转换 post字符转换

    本文将深入探讨"字符编码过滤器"、"J2EE字符编码"、"字符编码转换"以及"POST字符转换"这些关键知识点,并结合提供的文件"encoding-filter.jar"和"使用方法.txt"来解释它们的应用。 首先,字符编码是计算机存储和...

    易语言字符编码转换

    在处理字符串和文本数据时,字符编码转换是一个常见的需求,因为不同的系统和应用可能使用不同的字符编码标准来表示文本。本资源提供了易语言字符编码转换的源码,帮助开发者理解和实现这一功能。 字符编码是用来...

    工具-字符编码转换

    本文将基于“工具-字符编码转换”的主题,深入探讨字符编码的概念、常见编码格式、字符编码转换工具以及如何进行实际操作。 字符编码是计算机表示和处理文字的一种方式,它将各种字符与二进制数字对应起来。常见的...

    字符编码转换,支持任意编码

    字符编码是计算机处理文本的基础,不同的编码方式使得各种语言的文字得以正确显示。在这个主题中,我们将深入探讨“字符编码转换”这一重要概念,以及如何支持包括GBK、UNICODE(UTF-16)、UTF-8以及GB18030等在内的...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.pdf

    Java中的字符编码转换是编程实践中一个至关重要的概念,尤其是在处理多语言环境和跨平台交互时。Java通过统一采用UTF-16编码格式在JVM内部处理字符,简化了字符操作的复杂性。UTF-16是一种变长的Unicode编码,它可以...

    字符编码转换处理工具

    字符编码是计算机科学中的一个重要概念,它涉及到如何在数字系统中表示和处理文本。在我们的日常生活中,无论是浏览网页、编辑文档还是发送电子邮件,字符编码都在背后默默地工作,确保我们看到的文字能正确显示。...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    在编程领域,字符编码是处理文本数据的关键环节。C语言虽然相对较旧,但它仍然被广泛用于系统级编程和底层开发,包括字符编码的转换。在这个主题中,我们将深入探讨如何在C语言中进行UNICODE、GBK和UTF-8之间的转换...

    不同字符编码转换

    在IT领域,字符编码是处理文本数据的关键环节。不同的字符编码标准用于表示各种语言和特殊符号,确保数据在不同系统间正确传输和显示。这里我们将深入探讨标题和描述中提到的一些主要字符编码格式:UTF-8、UTF-7、...

    字符编码转换.rar

    在IT领域,字符编码是数据处理中的重要环节,它决定了我们如何存储和传输文本信息。在给定的“字符编码转换.rar”压缩包文件中,包含的资源可能是一个LabVIEW程序或工具,用于进行不同字符编码间的转换,比如UTF-8到...

    Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    在Qt开发中,字符编码转换是一项关键任务,尤其是在处理跨平台和多语言支持时。本文主要探讨了在Qt中如何进行UTF8、Unicode、GBK、ASCII、16进制字符和16进制数值之间的转换。 首先,让我们简单回顾一下各种编码...

    字符编码转换(GB2312,UTF-8,UNICODE)

    字符编码在信息技术中扮演着至关重要的角色,它决定了计算机如何理解和显示各种语言的文本。本文将深入探讨GB2312、UTF-8和UNICODE这三种常见的字符编码,并介绍如何进行编码转换。 1. GB2312编码:GB2312,全称为...

    字符编码转换,最终版,支持系统所有编码

    字符编码是计算机处理文本的基础,它定义了字符与二进制数字之间的映射关系。在计算机科学领域,理解和掌握字符编码转换至关重要,因为不同的编码方式适用于不同的场景,且在全球化的今天,多语言环境下的数据交换...

    VC/C++ 字符编码格式转换

    在编程领域,尤其是在Windows开发中,字符编码是一个重要的概念,涉及到数据的正确显示和处理。在VC/C++环境中,常见的编码格式有ANSI、UTF-8和Unicode。这些编码各有其特点,适用于不同的场景。本篇文章将深入探讨...

    UTF8.rar_UTF8_字符编码转换

    标题中的"UTF8.rar_UTF8_字符编码转换"暗示了这个压缩包文件主要涉及的是关于UTF-8字符编码转换的相关内容。UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode标准中的所有字符,且在互联网上被普遍采用...

    文件字符编码转换

    在IT领域,字符编码是处理文本数据的关键环节。字符编码决定了计算机如何存储和显示文本,尤其是在多语言环境和网络通信中。"文件字符编码转换"的主题着重于如何将不同编码格式的文件或文件夹在GBK、GB2312、Unicode...

    字符编码转换 字符串到Unicode的转换等

    字符编码转换 字符串到Unicode的转换等 字符高低位转换等。

    CC++ 字符编码的转换(ut8、gb2312)

    在编程领域,字符编码是处理文本数据的关键环节。在CC++中,理解并掌握不同的字符编码,如UTF-8、GB2312、GBK以及Big5,对于编写跨平台和兼容多语言的程序至关重要。本文将深入探讨这些编码标准,并提供在CC++中进行...

    字符编码转换 2014_口罩机程序_

    从压缩包子文件的文件名称“GBK转Unicode 2014.vi”和“字符编码转换 2014.vi”来看,这里使用的是LabVIEW(Laboratory Virtual Instrument Engineering Workbench)编程环境,它是一种图形化编程语言,广泛应用于...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.doc

    ### Java中的字符集编码入门(五):Java代码中的字符编码转换Part1 #### 核心知识点概述: 本文档深入探讨了Java编程语言中字符集编码的基础知识,并着重讲解了字符编码转换的基本原理及其在Java代码中的应用。...

    字符解码转换软件.zip

    字符编码在信息技术领域中起着至关重要的作用,它决定了计算机如何理解和显示文本。"字符解码转换软件"是一个专门用于处理字符编码转换的工具,它能够帮助开发者和测试人员便捷地在不同编码格式之间进行转换,例如从...

Global site tag (gtag.js) - Google Analytics