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永远是0
例子,A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary
之间转换,自己试试。
第128到2047个字节,要用10个bit来表示
代码
- 0 0 0 0 0 x10 x9 x8
- 7 x6 x5 x4 x3 x2 x1 x0
<script>render_code();</script>
Utf-8就把这些字节编成下面这样的两个byte
代码
- 1 1 0 x10 x9 x8 x7 x6
- 1 0 x5 x4 x3 x2 x1 x0
<script>render_code();</script>
第2048到65535个字节,要用16个bit来表示,Utf-8把这些字节编成下面这样的三个byte
代码
- 1 1 1 0 x15 x14 x13 x12
- 1 0 x11 x10 x9 x8 x7 x6
- 1 0 x5 x4 x3 x2 x1 x0
<script>render_code();</script>
读一个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。剩下的自己算算。然后和这个程序的结果比较一下。
http://www.ingrid.org/java/i18n/utf-16/
代码
- public class Test {
- 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
- System.out.print(Integer.toHexString(b[i]).substring(6) + " ");
- }
- System.out.println();
- }
- }
|
相关推荐
如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE...
在C++编程中,UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。本文将深入探讨如何在C++中处理UTF-8字符串,并介绍相关的关键概念和技术。 首先,C++标准库并没有直接支持UTF-8编码...
标题中的“中文-UTF-8编码转换器”指的是一个软件工具,它的主要功能是帮助处理中文和其他特殊字符在UTF-8编码环境下可能出现的乱码问题。UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode标准中的所有...
在LabVIEW编程环境中,"UTF-8toGBK.vi"这个程序可能是一个用户自定义的VI(Virtual Instrument),用于将UTF-8编码的字符串转换为GBK编码。LabVIEW作为一个图形化编程语言,提供了丰富的字符串处理函数,其中包括了...
GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...
UTF-8编码是一种广泛使用的字符编码标准,它在信息技术领域起着至关重要的作用。这个“UTF-8编码转换器”工具旨在帮助用户方便地将文本数据从其他编码格式转换为UTF-8,确保数据在不同系统和平台之间的兼容性。 在...
C# 生成 XML 文件,编码为 UTF-8 方法 C# 生成 XML 文件,编码为 UTF-8 方法是指在 C# 编程语言中,使用特定的方法和类来生成 XML 文件,并将其编码为 UTF-8 编码格式的过程。这种方法常用于数据交换、配置文件、...
标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...
为大家提供Python的UTF-8编码查询表,大家可以对照左列的编码查询右列的汉字。 例:\u4e00对应汉字“一”
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
UTF-8编码是一种广泛...了解UTF-8编码的工作原理和应用场景,对于从事IT工作的人来说是必不可少的基础知识。在实际工作中,无论是开发网页、编写代码还是处理多语言文本,掌握UTF-8的使用都能大大提升效率和准确性。
百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...
本资源主要关注如何判断一个文本文件是否采用UTF-8编码。 在Windows系统中,比如Windows 7旗舰版,我们经常使用Notepad.exe(记事本)来查看和编辑文本文件。在编程环境中,有时候我们需要编写代码来检查文件的编码...
UTF-8编码和GBK编码互转,一个头文件搞定!跨平台不使用第三方库。只需要添加一些C语言标准的头文件即可实现俩种编码互相转换。摆脱第三方库移植问题。原理是将UTF-8编码的汉字、字母、符号、数字等转换成unicode...
### UTF-8编码详解与汉字码表解析 #### UTF-8编码原理 UTF-8(Unicode Transformation Format - 8 bits)是一种变长字符编码,由Ken Thompson于1992年设计,旨在解决多语言环境下字符编码兼容性问题。其核心优势...
UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。在Visual Basic编程环境中,处理UTF-8编码的文件或数据时,你需要理解如何读取、写入以及转换UTF-8格式的数据。以下是一些关键的知识...
UTF-8编码的文本文件在处理中文字符时,如果没有正确设置编码,可能会导致中文字符显示不正确,即出现乱码现象。SAS EG是一个图形用户界面的程序,它提供了数据管理、统计分析、报告创建等功能,但它在处理不同编码...
### UTF-8编码详解 #### 一、简介 在计算机科学领域中,字符编码是将字符映射到二进制数字的一种方式。其中,UTF-8(8位通用转换格式)是一种可变长度的字符编码,它兼容ASCII,并且能够表示Unicode标准中的所有...
UTF-8-BOM,全称是“UTF-8 Byte Order Mark”,它在UTF-8编码的文件开头添加了一个特殊的字节序列(0xEF, 0xBB, 0xBF)来标识该文件使用的是UTF-8编码。BOM主要用于帮助软件识别文件的编码,但并非所有UTF-8编码的...
本话题主要关注IDEA对带有Byte Order Mark(BOM)的UTF-8编码文件的支持。 UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode字符集中的所有字符。BOM,即字节顺序标记,是UTF-8编码中可选的一部分,...