【Unicode介绍】

百度百科:Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,并且兼容ISO-8859-1。

一个字符的Unicode编码是确定的,但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)

Unicode是字符集,它主要有UTF-8、UTF-16、UTF-32三种实现方式。由于UTF-8是目前主流的实现方式。

UCS(Universal Character Set,通用字符集),是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。它包括了其他所有字符集,保证了与其他字符集的双向兼容,即,如果你将任何文本字符串翻译到UCS格式,然后再翻译回原编码,你不会丢失任何信息。

UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。

Java的class文件采用utf8的编码方式,Java的字符串是unicode编码的

UTF-8

UTF-8是一种针对Unicode的可变长度字符编码,可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的系统无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

UTF-8使用一到四个字节为每个字符编码,编码规则如下:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

转换表如下:

Unicode

UTF-8

0000 0000 —— 0000 007F

0XXX XXXX

0000 0080 —— 0000 07FF

110X XXXX 10XX XXXX

0000 0800 —— 0000 FFFF

1110XXXX 10XX XXXX 10XX XXXX

0001 0000 —— 001F FFFF

1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX

0020 0000 —— 03FF FFFF

1111 10XX 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX

0400 0000 —— 7FFF FFFF

1111 110X 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX

根据上面的转换表,理解UTF-8的转换编码规则就变得非常简单了:第一个字节的第一位如果为0,则表示这个字节单独就是一个字符;如果为1,连续多少个1就表示该字符占有多少个字节。

以汉字"严"为例,演示如何实现UTF-8编码[3]。

已知"严"的unicode是4E25(100 1110 0010 0101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

ANSI:记事本的默认的编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码。注意:不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中

Unicode:UCS-2编码方式,即直接用两个字节存入字符的Unicode码。该方式是倒序方式存取,该方式是"小头"little endian。

Unicode big endian:UCS-2编码方式,顺序方式存取,即 "大头"方式。

在EditPlus输入"严"字,依次选择ANSI、Unicode、Unicode big endian、UTF-8四种编码风格,然后另存,使用Hex Viewer工具进行查看:

ANSI:两个字节"D1 CF"正是"严"的GB2312编码。

Unicode:四个字节"FF FE 25 4E",其中"FF FE"表示小头(倒序)存储方式,真正的编码为"4E 25"。

Unicode big endian:四个字节"FE FF 4E 25","FE FF"表示大头(顺序)存储方式,真正编码为"4E 25"。

UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

java 编码 unicode_java编码-Unicode相关推荐

  1. java 处理unicode_Java与Unicode

    Java与Unicode:Java的class文件采用utf8的编码方式,JVM运行时采用utf16.Java的字符串是unicode编码的.总之,Java采用了unicode字符集,使之易于国际化. ...

  2. java 处理unicode_java处理unicode字符

    java处理unicode字符 关注:277  答案:4  mip版 解决时间 2021-01-19 19:19 提问者我不想放过你 2021-01-19 01:06 我的unicode字符存在sho ...

  3. java的unicode_Java中Unicode的中文范围

    若要判断是否是中文 只需要用以下代码: for (int i = 0; i < sentence.length(); i++){ char c = sentence.charAt(i); if ...

  4. java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...

    下列说法错误的是().A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种 更多相关问题 [名词解释] 捐躯juān qū [名词解释] 藕断丝连ǒu ...

  5. java乱码 java使用的编码是utf-8还是utf-16还是unicode

    简单介绍编码 Unicode:是容纳世界所有文字符号的国标标准编码,使用四个字节为每个字符编码 UTF:是英文 Unicode Transformation Format 的缩写,意为把 Unicod ...

  6. JAVA中默认的编码方式是Unicode是什么意思?

    编码问题存在两个方面:JVM之内和JVM之外. 1.Java文件编译后形成class 这里Java文件的编码可能有多种多样,但Java编译器会自动将这些编码按照Java文件的编码格式正确读取后产生cl ...

  7. 【JAVA编码专题】UNICODE,GBK,UTF-8区别

    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与g ...

  8. java菱形乱码 编码_JAVA:编码与乱码问题

    一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ...

  9. java 转换 unicode_JAVA中最方便的Unicode转换方法

    在命令行界面用native2ascii工具 1.将汉字转为Unicode: C:\Program   Files\Java\jdk1.5.0_04\bin>native2ascii 测试 \u6 ...

最新文章

  1. 【安全漏洞】某CMS后台防护逻辑漏洞导致GETSHELL
  2. Python学习笔记(基础知识点一)
  3. huggingface实操_Transformers 简介(上)
  4. GDCM:Patch File的测试程序
  5. Windows下MariaDB数据库安装图文教程
  6. mybatils多次查询问题
  7. 华为5g汽车鸿蒙,网传华为携手极狐造车新图片,搭载5G天线+鸿蒙OS!
  8. 深入认识Tigase XMPP Server(上)
  9. linux 时区异常修正
  10. 【转】关于python中re模块split方法的使用
  11. rk399_android7.1的mipi驱动代码追踪(部分)
  12. Python input和raw_input的区别
  13. matlab中的显示精度
  14. python爬虫新浪微博_python爬虫抓取新浪微博数据
  15. 【子网划分两个实例】通过子网数来划分子网和通过计算主机数来划分子网
  16. 获取微信中的音频方法
  17. 等分曲线轮廓,法线方向矩形
  18. 记录docker自定义easyswoole镜像
  19. 【QGIS入门实战精品教程】10.1:QGIS基于DEM数据的地形分析案例教程
  20. 352记--扬哥本纪

热门文章

  1. Ultimate Rope Editor 柔性绳子编辑器插件
  2. 友盟推送android 8.0系统不显示推送消息问题
  3. AI笔记: 数学基础之函数的导数应用及求导公式
  4. android 应用 电影资讯
  5. 如何实现一键调用以太坊智能合约
  6. 数据结构笔记1 线性表-顺序表示
  7. 一次基于K-means的聚类分析心得(python实现)
  8. html作业给父亲的三行书信,写给父亲的三行诗
  9. 简谈游戏场景灯光配置方案
  10. Python-Django毕业设计房屋中介管理信息系统(程序+Lw)