`

UTF-8编码

阅读更多
UTF-8


一、

1.Unicode

从AsciII表中获知 A = '65',即 在操作字符A时,计算机内部是对 (Unicode) 65进行操作

2.Java char <==> Unicode 标准字符集

int a = 'A';
System.out.println(a);
// 将字符赋值给int类型数据,未报错,可以理解为 'A' 字符A指代的就是65


输出结果:65

3.UTF-8 表示 1~4字节变长

为何中文使用UTF-8编码为3字节?

3.1  输出汉字的二进制编码
Integer b = '中';
System.out.println(Integer.toBinaryString(b));
Integer c = '国';
System.out.println(Integer.toBinaryString(c));


输出结果:
100111000101101
101011011111101

3.2  编码

String d = "中" ;
byte [] dArray = d.getBytes("UTF-8");
for(Integer index = 0 ; index < dArray.length; index ++){
System.out.println(Integer.toBinaryString(dArray[index] & 0xff));
}
System.out.println();
		
String e = "国" ;
byte [] eArray = e.getBytes("UTF-8");
for(Integer index = 0 ; index < eArray.length; index ++){
System.out.println(Integer.toBinaryString(eArray[index] & 0xff));
}


输出结果:

11100100
10111000
10101101

11100101
10011011
10111101

3.对比分析结果

1110_ _ _ _   10_ _ _ _ _ _   10_ _ _ _ _ _

中:100111000101101
(1110)0100   (10)111000      (10)101101

国:101011011111101
(1110)0101   (10)011011      (10)111101


通过3个字节来表示,
2~4*2~6*2~6=2~16

故汉字的Unicode的二进制为16位
101011011111101(长度16)

4.编码

// 结果:中
String h = new String(dArray,"UTF-8");
System.out.println(h);
// 结果:乱码
String g = "国" ;
byte [] gArray = g.getBytes("GBK");
for(Integer index = 0 ; index < gArray.length; index ++){
System.out.println(Integer.toBinaryString(gArray[index] & 0xff));
}
String i = new String(gArray,"UTF-8");
System.out.println(i);



结论:
用什么格式解码用什么格式编码

5.java web 乱码

tomcat的自带编码是ISO-8859-1的格式

String j = new String(str.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(j);



二、编码特点

1.
一种变长的编码方式。
用1~6个字节表示一个符号,根据不同的符号而变化字节长度。
Unicode编码长度是固定的,无论是数字、英文还是火星文。所以Unicode编码有点浪费空间。UTF8是针对unicode的空间浪费现象,它对字符的长度是动态的。

2.
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

示例:如上

博文参考:
Java中字符编码问题和中文占几个字节的问题(ASCII Unicode UTF-8 )



分享到:
评论

相关推荐

    UTF-8编码表

    如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE...

    中文-UTF-8编码转换器

    标题中的“中文-UTF-8编码转换器”指的是一个软件工具,它的主要功能是帮助处理中文和其他特殊字符在UTF-8编码环境下可能出现的乱码问题。UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode标准中的所有...

    Delphi和JAVA进行TCPIP通信(用UTF-8编码)例子

    最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...

    SAS EG导入UTF-8编码的文本数据文件时的乱码问题解决方法

    UTF-8编码的文本文件在处理中文字符时,如果没有正确设置编码,可能会导致中文字符显示不正确,即出现乱码现象。SAS EG是一个图形用户界面的程序,它提供了数据管理、统计分析、报告创建等功能,但它在处理不同编码...

    UTF-8编码转换器

    UTF-8编码是一种广泛使用的字符编码标准,它在信息技术领域起着至关重要的作用。这个“UTF-8编码转换器”工具旨在帮助用户方便地将文本数据从其他编码格式转换为UTF-8,确保数据在不同系统和平台之间的兼容性。 在...

    百度编辑器asp版UTF-8编码

    百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...

    UTF-8编码转化(Visual Basic)

    UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。在Visual Basic编程环境中,处理UTF-8编码的文件或数据时,你需要理解如何读取、写入以及转换UTF-8格式的数据。以下是一些关键的知识...

    中文字符 UTF-8 编码查询表

    为大家提供Python的UTF-8编码查询表,大家可以对照左列的编码查询右列的汉字。 例:\u4e00对应汉字“一”

    GBK编码转换和UTF-8编码转换模块源码

    GBK编码和UTF-8编码是两种广泛使用的字符编码标准,它们各有特点,但不兼容,因此在不同环境下进行数据交换时,需要进行相应的转换。 GBK编码是中国大陆广泛采用的一种汉字编码标准,它是GB2312的扩展,包含了更多...

    UTF-8 编码转换工具

    UTF-8编码转换工具是一种专门用于处理文本编码问题的实用程序,它可以帮助用户批量将非UTF-8编码的文件转换为UTF-8编码格式。在IT领域,编码是存储和传输字符的重要方式,不同的编码标准可能导致乱码问题,尤其是在...

    判断文本文件是否为UTF-8编码

    本资源主要关注如何判断一个文本文件是否采用UTF-8编码。 在Windows系统中,比如Windows 7旗舰版,我们经常使用Notepad.exe(记事本)来查看和编辑文本文件。在编程环境中,有时候我们需要编写代码来检查文件的编码...

    泰文UTF-8编码转成Unicode编码详细代码

    文件里有详细的代码,编码格式选择UTF-8编码,亲测在linux下可以直接运行。泰文在osd输出的流程一般是泰文先转换成Unicode编码,然后调用freetype进行文字渲染叠加

    PB9转换utf-8例子

    标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...

    UTF-8 汉字码表

    ### UTF-8编码详解与汉字码表解析 #### UTF-8编码原理 UTF-8(Unicode Transformation Format - 8 bits)是一种变长字符编码,由Ken Thompson于1992年设计,旨在解决多语言环境下字符编码兼容性问题。其核心优势...

    UTF-8汉字码表.txt

    ### UTF-8编码详解 #### 一、简介 在计算机科学领域中,字符编码是将字符映射到二进制数字的一种方式。其中,UTF-8(8位通用转换格式)是一种可变长度的字符编码,它兼容ASCII,并且能够表示Unicode标准中的所有...

    GBK、UTF-8编码转换工具

    GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...

    字符编码转换类,支持 ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换

    对于ASCII字符,UTF-8编码与ASCII相同,都是单字节。UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_...

    xml.rar_UTF XML_UTF-8编码_utf_utf-8_xml utf-8

    在"xml.rar_UTF XML_UTF-8编码_utf_utf-8_xml utf-8"这个压缩包中,我们主要探讨的是与XML文档相关的编码问题,特别是UTF-8编码。 UTF-8是一种广泛使用的Unicode字符编码方案。它能够表示Unicode标准中的所有字符,...

    JDK中文转utf-8编码

    JDK 中文转 utf-8 编码 JDK 中文转 utf-8 编码是 Java 开发中常见的问题,特别是在处理中文字符时。_utf-8 编码是一种通用的编码方式,可以表示所有 Unicode 字符。在 JDK 中提供了一个工具 native2ascii.exe,可以...

Global site tag (gtag.js) - Google Analytics