`
gelongmei
  • 浏览: 197535 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

char类型与Unicode编码

 
阅读更多
char类型与Unicode编码
Unicode(UTF-8, UTF-16)令人混淆的概念

Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码。

要理解这个问题,我们必须要理解什么是Unicode。

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。

Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。与ASC2和ISO-8859-1类似,Unicode是一种编码方式,但是它所包括字符的范围却与之前的所有编码方式有着天壤之别。Unicode是一个囊括了几乎世界上所有文字的字符编码表。它的目标是任何文字都可以在其中找到唯一的编码,例如0041表示了字符A,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。它所要解决的主要问题是:不同语言和地区之间字符编码转换的问题,如果
采用了Unicode编码的话则不需要在不同的字符集之间切换,因为都包括在Unicode当中。
Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同,具体由UTF(UCS Transformation Format)规范规定,常见的UTF规范包括UTF-8、UTF-16、UTF-32。

Java语言中char类型采用UTF-16编码格式。
从JDK1.5开始,代码点(code point)是指与一个编码表中某个字符对应的代码值。在Unicode标准中,代码点采用16进制数写,并加上前缀U+,例如U+0041就是字母A的代码点。Unicode代码点可以分成17个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basic multilingual plane),代码点从U+0000到U+FFFF,其中包括了经典的Uncode代码;其余16个附加级别,代码点从U+10000带U+10FFFF,其中包括了一些辅助字符(supplementary character)。
UTF-16它采用不同长度的编码表示所有的Unicode代码点(是一种变长的编码方式)。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元惊醒编码。这样构成的代码值一定落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)(U+D800到U+DBFF用于第一个代码单元,U+DC00到U+DFFF用于第二个代码单元)。这种设计十分巧妙,我们可以从中迅速的知道一个代码单元是一个字符编码,还是一个辅助字符的第一或第二部分。
强烈建议不要再程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。可以采用转义序列符/u表示Unicode代码单元。(为什么呢?)

写了段代码,从中可以可以基本理解Java的char、Unicode、代码点和代码单元的概念了,详见 Java中的基础类型,用二进制表示数字
分享到:
评论

相关推荐

    JavaScript字符的unicode编码

    // unicode: 返回一个字符的...// 码值与ascii码相同。因此本函数也可以用作不严格地判断一个字 // 符是半角还是全角。当返回值小于256时,char为半角字符,否则 // char为全角字符。 // sylens@smth, 2004/12/06

    字符转化为UNICODE码

    在筐里输入要转化的字符,求出UNICOUDE码值!

       char型变量中能不能存储一个中文汉字?为什么

     char型变量中能不能存储一个中文汉字?为什么 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,...补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

    让开源项目TinyXml支持Unicode(wchar_t)

    3. TinyXml函数提供的Xml内容解析功能,不支持内容以UTF16编码和UTF32编码的Xml字符串,也即`Unicode编码`。 4. UTF8编码是Unicode编码的一种实现方式,以不定个数的字节来存储一个Unicode码值,支持多国语言文字...

    编码转换小工具,增加了批量转换功能[html编码转换 unicode编码转换 url编码转换 编码转换]

    在原来的基础上加了选择文件和文件夹的转换功能,这是基于framework 3.5的winform程序,使用前请确定自己的电脑是否安装了framework 3.5

    JavaScript中字符串与Unicode编码互相转换的实现方法

    本文实例讲述了JavaScript中字符串与Unicode编码互相转换的实现方法。分享给大家供大家参考,具体如下: 这段代码演示了JavaScript中字符串与Unicode编码的转换: // 为了控制台的演示方便, 变量没有添加 var 定义 /...

    CString,string,char*之间的转换

    以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s") 补充: CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来...

    C++11 Unicode编码转换

    1.char16_t与char32_t 在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t...(1)char16_t:用于存储UTF-16编码的Unicode字符。 (2)char32_t:用于存储UTF-32

    Java程序设计基础:字符数据类型.pptx

    字符内部Unicode字符编码,占2个字节,可表示0~216-1(65535)个字符,通常用一对单引号引用,如:‘a’,‘5’等。 字符数据类型(char) ASCII 码是 Unicode 码的一个子集,用 Unicode 表示 ASCII 码时,可表示其前...

    C++Builder String,UNICODE,UTF8,ANSI互转的类.rar_c

    C++Builder String,UNICODE,UTF8,ANSI互转的类,类的互相转换

    两万余汉字各种编码汇总(Unicode,GBK,五笔,拼音)

    共收录了20000多汉字,列出了它们的Unicode码,GB2312码,GBK码,BIG5码。(都为十六进制,Unicode码包括十进制,要看其它的十进制可以对十六进制值在Excel表中使用Hex2Dec(source)转换),另外还收录了汉字的五笔...

    2015年面试宝典

    这个数值是一个字符在unicode编码表中的编码值, unicode编码表是一个全球范围内的编码。编制了世界上绝大部分 国家的文字,有8万多个字符, 首先根据编码值找到unicode表中对应的字符,再从操作系统中的字符字库里面...

    url编码转化,将url转化成unicode进行传输

    对url进行编码转换,在实际应用中url的传输的是unicode的编码,因此每次提交url之前需要将其转化 这里是C/C++版的url转化,使用的是char格式的转换,但便于操作在最后将其转化为CString传输,可以根据需要对其进行...

    c#通过unicode编码判断字符是否为中文示例分享

    代码如下:protected bool IsChineseLetter(string input,int index){int code = 0;int chfrom = Convert.ToInt32(“4e00”, 16);... //获得字符串input中指定索引index处字符unicode编码 if (code >=

    CHARCODE.exe

    编码转化工具,支持ansi、utf8、unicode等实时转换,支持编码猜测,支持16进制、10进制转换。

    字符编码 类型检测 打开

    程序可以自动检测文本文件的编码类型,并用记事本以正确的编码类型打开,基本结局了windows记事本因编码类型错误引起的乱码情况。 使用方式cmd下 chartype /?查看命令行使用方式。 鼠标右键快捷方式直接打开。 文件...

    C#语言中字符类char的使用方法(总结)

    unicode字符是目前计算机中通用的字符编码,它为针对不同语言中的每个字符设定了统一的二进制编码,用于满足跨越语言、跨平台的文本转换、处理要求。char的定义非常简单,如下: char ch1=‘z’; 但是,char只能...

    C++字符串操作经验集

    char是C语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。 wchar_t是char的Unicode版本。相当于unsigned short。一般两个字节。 CHAR 和WCHAR分别是char和wchar_t的别名,决不会等同。...

    记录所有有关java的学习笔记.rar

    2.1 char :Unicode编码的字符,或字符的整数编码,必须用单引号 float默认值是0.0f; double默认值是0.0d; 2.2基本类型字面值规则 1.整数字面值是int类型,如果右侧赋值超出int范围,需要做转型处理 2.byte,...

    Unicode中文转码函数代码

    代码如下: /// <summary> /// Unicode字符转换为中文字符,如96F7,78CA等” /// </summary> private char UnicodeToChineseByHex(string Unicode) { return (char)int.Parse(Unicode, System.Globalization.Number...

Global site tag (gtag.js) - Google Analytics