关键字: 编码
Utf-8编码是如何工作的讲起。
(JVM规范第4.4.7提了一些,O'Reilly出的Java I/O里讲的比较详细,我手里的是第一版,在第14章,Mutillingual Character Sets and Unicode)
Java用的Unicode用两个字节表示一个charater,字母A用Hex表示是00 41, B是00 42,在一个纯英文的环境里面,直接存成Unicode的文件一半都是由零组成的,浪费资源。Utf-8的主要目的是对ASCII表格头128个字母优化,牺牲的是对中文字符的存储。
头128个字节(0到127),可以用七个bit来表示,x6 x5 x4 x3 x2 x1 x0.第八个bit 7x 永远是0
例子,A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary
之间转换,自己试试。
第128(十进制)到2047个字节,要用10个bit来表示
[code="java"]
0 0 0 0 0 x10 x9 x8
x7 x6 x5 x4 x3 x2 x1 x0
[/code]
Utf-8就把这些字节编成下面这样的两个byte
[code="java"]
1 1 0 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
[/code]
第2048(十进制)到65535个字节,要用16个bit来表示,Utf-8把这些字节编成下面这样的三个byte
[code="java"]
1 1 1 0 x15 x14 x13 x12
1 0 x11 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0
[/code]
读一个Utf-8编码的array,如果第一个byte的高位是1110,那么要连读下面两个以 10 开头的byte。如果一个byte的高位是110,那么要连读下面一个以 10 开头的byte。
如果一个byte的高位是0,那么这个byte就是一个字符了。
可以做个练习,中文字"哈"的Unicode编码是Hex 54 C8,转成Utf-8是什么?
Hex 54 C8 转成十进制是21704,转成Utf-8后要用三个byte,找张纸,画三行,每行8个格子,第一行头四个格子填上1110,第二行头两个格子填上10,第三行头两个格子填上10。剩下的自己算算。然后和这个程序的结果比较一下。
public class CharSetTest {
public static void main(String [] args)
{
char c[]= { '\u54c8' };
String ha = new String(c);
byte b[] = null;
try {
b = ha.getBytes("utf-8");
} catch (Exception e) { System.exit(-1);}
for(int i=0; i<b.length; i++)="" {="" system.out.print(integer.tohexstring(b[i]).substring(6)="" +="" "="" ");="" }="" system.out.println();="" }="" }="" <="" pre="">
e5 93 88
0101 0100 1100 1000
1110 0101 1001 0011 1000 1000
toHexString ffffffe5,ffffff93,ffffff88具体怎么解释呢,搞的不清楚呀!大家多指点呀!
分享到:
相关推荐
请使用这款软件,直接将代码转换为UTF-8 注意: 1、xml不需要转换,因为xml默认是utf-8,在你新建的时候已经是正确的格式了 2、图片更不需要转换 3、bin目录,gen目录的直接忽略 4.只需要src目录的代码转换,请确保...
标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...
标题"批量将文件编码方式由ansi转为utf-8"涉及到的是一个文件处理任务,即转换大量以ANSI编码存储的文件到UTF-8编码。这通常是由于ANSI编码不支持某些非英文字符,或者在跨平台交互时可能会遇到问题,而UTF-8编码则...
"UTF-8转ANSI文本文件转换器"就是这样一个工具,它能够帮助用户批量将UTF-8编码的文本文件转换为ANSI编码的文本文件。在此,我们将深入探讨UTF-8和ANSI编码的原理以及转换过程中涉及的关键知识点。 **一、UTF-8编码...
最近需要对Linux与Windows平台下的字符传输出现乱码,对...参考了网上的UTF-8/UTF-16转换的资料,只有0x10000以下的Unicode编码进行了转换;对其代码进行了修改和补充,可以实现所有的UTF-8/UTF-16的转换,分享给大家。
UTF-8编码的文本文件在处理中文字符时,如果没有正确设置编码,可能会导致中文字符显示不正确,即出现乱码现象。SAS EG是一个图形用户界面的程序,它提供了数据管理、统计分析、报告创建等功能,但它在处理不同编码...
百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...
它的优点在于兼容性好,大多数现代软件和网页浏览器都能很好地支持UTF-8编码,减少了乱码问题的出现。 相反,ANSI编码(通常指的是Windows默认的代码页,如Windows-1252)是特定地区的单字节编码,只包含有限的字符...
标题中的"bat脚本将csv格式UTF-8批量转ANSI"指的是利用批处理脚本来自动化转换一批UTF-8编码的CSV文件为ANSI编码。批处理脚本是Windows操作系统中的一种简单程序,它由一系列命令组成,可以一次执行多个命令,节省了...
在处理文本数据时,易语言提供了丰富的函数和方法,其中之一就是将文本转换为UTF-8编码。 UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode字符集中的所有字符。与GBK等其他编码相比,UTF-8在全球化和...
UTF-8的一个显著特点是兼容ASCII编码,对于ASCII字符,UTF-8编码与ASCII编码完全相同,仅用一个字节表示。对于非ASCII字符,UTF-8使用1到4个字节来表示,这样设计使得在多数英文为主的系统中,可以有效利用存储空间...
UTF-8编码是一种广泛使用的字符编码标准,它能够支持Unicode字符集,包括全球几乎所有的文字系统。GBK和GB2312则是中文编码标准,主要针对简体中文字符。在描述中提到的情况,即“日历脚本”通常是指用于生成、显示...
8中文乱码插件"是解决Source Insight 3.5与UTF-8编码不兼容问题的有效工具,通过正确安装和应用此插件,开发者可以更顺畅地在Source Insight环境中阅读和编辑包含中文字符的代码,提高工作效率。对于依赖Source ...
在"jmeter5.0官网utf-8编码"这个主题中,我们关注的是JMeter 5.0版本,并且源码已经修改为UTF-8编码,以解决在使用过程中可能出现的字符乱码问题。 JMeter 5.0是Apache JMeter的一个重大更新,它引入了多项改进和新...
首先,我们要理解什么是UTF-8编码。UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode字符集中的所有字符,且在网页和互联网上特别常见。UTF-8的一个特点是它兼容ASCII编码,前128个字符与ASCII编码相同...
该程序支持.c .h .cpp .hpp .bat .java等6种格式的文件编码转换,如果需要添加其他格式的文件,直接修改suffix的条件判断处的语句即可,压缩包中提供exe程序和python写的源码
ANSI --> UTF-8 Unicode --> ANSI Unicode --> UTF-8 UTF-8 --> ANSI UTF-8 --> Unicode UTF-8 --> Unicode big endian ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不...
Java工程编码格式由GBK转化成utf-8(编码格式互转) https://ymjin.blog.csdn.net/article/details/118769530
1. **编码转换**:如果你有一个用Utf-8编码的字符串,想转换成GB2312,你需要先将Utf-8编码的字节流解码,然后再用GB2312编码。代码示例如下: ```csharp string utf8Str = "你的Utf-8字符串"; byte[] utf8Bytes = ...
- 反之,从UTF-8转GBK则需要解析UTF-8编码的字节序列,找到对应的Unicode码点,再转换成GBK编码。 5. **转换函数示例** - `gbk_to_utf8()`函数可能接收GBK编码的字符串作为输入,返回转换后的UTF-8编码字符串。 ...