ASCII
我们入门学习是最常用的一种编码方式,因为1位二进制数可以表示2^n种状态:0、1;而2位二进制数可以表示2^2=4种状态:00、01、10、11;依次类推,7位二进制数可以表示2^7=128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。
即一个字节表示一个字符。
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("ASCII");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
}
String dis = new String(b);
System.out.println("转化回来的是:"+dis);
结果就是:
字节为:102
字节为:117
字节为:99
字节为:107
字节为:63
字节为:63
字节为:63
转化回来的是:fuck???
因为ASCII码,将“你奶奶”中文里面的一个字符也只看作一个字节。
Unicode
包含了世界上的所有语言编码,目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。Unicode的实现方式称为Unicode转换格式(Unicode Translation Format,简称为UTF)。
即:Unicode编码的无论是英文、数字还是汉字,全部由2个字符表示。
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("Unicode");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
}
String dis = new String(b);
输出为:
字节为:-2
字节为:-1
字节为:0
字节为:102
字节为:0
字节为:117
字节为:0
字节为:99
字节为:0
字节为:107
字节为:79
字节为:96
字节为:89
字节为:118
字节为:89
字节为:118
但是我们会发现,转化的时候之前的两位多了一个 -2 -1
因为:如果一个仅包含基本7位ASCII字符的Unicode文件,如果每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0[7位ASCII只占一个字节的前7位,高位致0]。这就造成了比较大的浪费。对于这种情况,可以使用UTF-8编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度。
UTF-8
UTF-8是UNICODE的一种变长字符编码又称万国码,如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("UTF-8");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
}
String dis = new String(b);
结果为:
字节为:102
字节为:117
字节为:99
字节为:107
字节为:-28
字节为:-67
字节为:-96
字节为:-27
字节为:-91
字节为:-74
字节为:-27
字节为:-91
字节为:-74
即:我们可以看得出来,英文数字用两个字节表示,中文用三个字节表示。
GBK
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("GBK");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
}
结果为:
字节为:102
字节为:117
字节为:99
字节为:107
字节为:-60
字节为:-29
字节为:-60
字节为:-52
字节为:-60
字节为:-52
即:一字符都是用两个字节表示
GB2312
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("GB2312");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
结果为:
字节为:102
字节为:117
字节为:99
字节为:107
字节为:-60
字节为:-29
字节为:-60
字节为:-52
字节为:-60
字节为:-52
编码规则类似GBK
ISO-8859-1
ISO/IEC 8859-1,又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,藉以供使用变音符号的拉丁字母语言使用。
String testString = "fuck你奶奶";
byte b[] = testString.getBytes("ISO-8859-1");
//转化为一个个字节
for(int i=0;i<b.length;i++){
System.out.println("字节为:"+b[i]);
}
结果为:
字节为:102
字节为:117
字节为:99
字节为:107
字节为:63
字节为:63
字节为:63
即:所有的字符都用一个字节表示。
分享到:
相关推荐
首先,我们需要明确几个基本概念:字符集(Character Set)与字符编码(Character Encoding)。 1. **字符集**:定义了一组字符的集合,如ASCII、GBK、GB2312等。 2. **字符编码**:指如何将字符集中的字符转换为二进制...
### Tomcat字符编码总结 #### 一、引言 在Web开发中,字符编码问题一直是让人头疼的问题之一,尤其是在处理中文等多字节字符时。本文将深入探讨Tomcat环境中字符编码的相关知识点,并通过实际案例分析如何有效解决...
本篇将对几种常见的信道编码方式进行总结,重点探讨霍夫曼编码。 1. 前言 信道编码的目的在于提高通信系统的抗干扰能力,它通过在源数据中插入额外的码元,形成纠错或检错能力。这些编码方法包括但不限于汉明码、...
本文将详细介绍ASP中几个用于字符编码转换的函数,帮助开发者解决这类问题。 #### 二、UTF-8到GB2312的转换函数 首先介绍的是一个将UTF-8编码的文字转换为GB2312编码的文字的函数——`UTF2GB`。该函数的核心逻辑...
根据给定文件的信息,我们可以总结出以下关于“判断字符编码格式代码”的相关知识点: ### 一、背景介绍 在计算机科学领域,字符编码是将文本转换为数字表示的方法,以便于计算机存储和处理。常见的字符编码包括...
本文将详细探讨字符编码的基础知识,并着重介绍几种常见的字符编码及其转换方法,特别是针对中文字符的处理。 #### 二、ASCII与扩展ASCII ASCII(American Standard Code for Information Interchange)即美国信息...
【标题】:“Java编码总结1”主要涉及到Java编程语言中的编码问题,这在软件开发中是至关重要的。编码问题往往会导致程序出现难以预料的错误,尤其是处理多国语言或者特殊字符时。Java作为广泛使用的跨平台语言,其...
字符编码之间的转换主要涉及以下几个步骤: 1. **识别源编码**:首先需要确定原始数据所使用的字符编码。这可以通过文件头部标识、编码声明或者根据内容特征来判断。 2. **转换过程**:一旦确定了源编码,就可以...
在功能实现上,实验涵盖了以下几个模块: 1. 初始化模块:负责从键盘接收字符集大小n和字符及其权值。 2. 构建哈夫曼树模块:使用输入数据构建哈夫曼树,并将其存储到文件`hfmtree.dat`。 3. 哈夫曼编码模块:...
在中文信息处理领域,有几种重要的字符编码标准,包括区位码、GB2312、GB18030-2005以及Unicode 8.0。 区位码是早期中国计算机汉字编码的一种方式,它由两个字节组成,每个字节对应一个四位的十进制数,分别代表...
- 编码字符集:根据字符集内字符的多少,确定用几个字节来编码。 - 被编码过的字符集:限定了一组明确字符的字符集,也叫编码字符集。 3. ASCII字符集 - ASCII字符集是基于罗马字母表的一套电脑编码系统,由美国...
总结来说,`JAVA 转换字符编码工具`是利用Java语言实现的字符编码转换程序,通过提供的源代码文件可以学习到如何在Java中进行编码转换操作,以及如何设计和测试这样的工具。这个工具对于处理多语言环境或跨平台通信...
它是一种国际化的字符编码标准,旨在提供一种统一的字符编码方案。Unicode 支持世界上几乎所有语言的字符集,包括中文、日文、韩文等非拉丁语系的文字。Unicode 采用可变长度的编码方式,最常见的是UTF-8、UTF-16和...
在JavaScript(JS)中,处理中文字符编码是一个常见的需求,特别是在与服务器交互或者处理文本数据时。GB2312编码是一种在中国大陆广泛使用的简体中文字符集,它包含了6763个常用汉字和一些其他字符。在JavaScript中...
本文将详细介绍几种常见的字符编码(Unicode, ISO-8859-1, GBK, UTF-8)及其在Java中的应用,并讨论它们之间的相互转换方法。 #### 1. Unicode Unicode是一种国际标准字符集,它为每一个字符分配了一个唯一的数字,...
总结来说,字符编码是计算机处理文字信息的核心,从早期的ASCII到现在的Unicode,编码技术不断演进,以适应全球化的信息交流需求。理解字符编码原理对于解决乱码问题、进行跨平台文件交换以及开发多语言软件至关重要...
总结,理解和掌握字符编码转换在Qt开发中至关重要,特别是处理多语言文本、串口通信或与其他系统交互时。确保正确地进行编码转换,可以避免乱码问题,提高软件的兼容性和稳定性。在实际编程中,应根据需求选择合适的...
构建哈夫曼树的过程主要包括以下几个步骤: 1. **统计频率**:首先,我们需要统计输入数据中各个字符或符号的出现频率。 2. **构建优先队列**:将每个字符作为一个节点,频率作为权重,用优先队列(通常使用最小堆...
Unicode是一种国际化的字符编码标准,它为每一个字符分配了一个唯一的数字。本文将详细介绍一个包含6674个汉字的Unicode编码表,并解释这些编码的含义及其应用。 #### 二、Unicode编码介绍 **Unicode** 是一种用于...