`
stchou
  • 浏览: 205119 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

几个文字编码小总结

阅读更多

ASCII

我们入门学习是最常用的一种编码方式,因为1位二进制数可以表示2^n种状态:01;而2位二进制数可以表示2^2=4种状态:00011011;依次类推,7位二进制数可以表示2^7=128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0127。所以,7ASCII码是用七位二进制数进行编码的,可以表示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个字节。这样理论上一共最多可以表示21665536个字符。基本满足各种语言的使用。实际上目前版本的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

因为:如果一个仅包含基本7ASCII字符的Unicode文件,如果每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0[7ASCII只占一个字节的前7,高位致0]。这就造成了比较大的浪费。对于这种情况,可以使用UTF-8编码,这是一种变长编码,它将基本7ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为01进行识别。这样对以7ASCII字符为主的西文文档就大大节省了编码长度。

 

UTF-8

UTF-8UNICODE的一种变长字符编码又称万国码,如果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标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140FEFE(剔除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

 

即:所有的字符都用一个字节表示。

2
2
分享到:
评论
1 楼 天使的羽翼 2011-01-24  
你怎么能把粗痞话写到程序中来呢?

相关推荐

    网页字符编码问题总结及解决

    首先,我们需要明确几个基本概念:字符集(Character Set)与字符编码(Character Encoding)。 1. **字符集**:定义了一组字符的集合,如ASCII、GBK、GB2312等。 2. **字符编码**:指如何将字符集中的字符转换为二进制...

    tomcat字符编码总结

    ### Tomcat字符编码总结 #### 一、引言 在Web开发中,字符编码问题一直是让人头疼的问题之一,尤其是在处理中文等多字节字符时。本文将深入探讨Tomcat环境中字符编码的相关知识点,并通过实际案例分析如何有效解决...

    信道编码的总结

    本篇将对几种常见的信道编码方式进行总结,重点探讨霍夫曼编码。 1. 前言 信道编码的目的在于提高通信系统的抗干扰能力,它通过在源数据中插入额外的码元,形成纠错或检错能力。这些编码方法包括但不限于汉明码、...

    asp中有关字符编码转换的几个函数.

    本文将详细介绍ASP中几个用于字符编码转换的函数,帮助开发者解决这类问题。 #### 二、UTF-8到GB2312的转换函数 首先介绍的是一个将UTF-8编码的文字转换为GB2312编码的文字的函数——`UTF2GB`。该函数的核心逻辑...

    判断字符编码格式代码

    根据给定文件的信息,我们可以总结出以下关于“判断字符编码格式代码”的相关知识点: ### 一、背景介绍 在计算机科学领域,字符编码是将文本转换为数字表示的方法,以便于计算机存储和处理。常见的字符编码包括...

    关于 字符编码的 转换 知识

    本文将详细探讨字符编码的基础知识,并着重介绍几种常见的字符编码及其转换方法,特别是针对中文字符的处理。 #### 二、ASCII与扩展ASCII ASCII(American Standard Code for Information Interchange)即美国信息...

    java编码总结1

    【标题】:“Java编码总结1”主要涉及到Java编程语言中的编码问题,这在软件开发中是至关重要的。编码问题往往会导致程序出现难以预料的错误,尤其是处理多国语言或者特殊字符时。Java作为广泛使用的跨平台语言,其...

    字符编码之间的转换规则与实现

    字符编码之间的转换主要涉及以下几个步骤: 1. **识别源编码**:首先需要确定原始数据所使用的字符编码。这可以通过文件头部标识、编码声明或者根据内容特征来判断。 2. **转换过程**:一旦确定了源编码,就可以...

    数据结构哈夫曼编码实验报告.doc

    在功能实现上,实验涵盖了以下几个模块: 1. 初始化模块:负责从键盘接收字符集大小n和字符及其权值。 2. 构建哈夫曼树模块:使用输入数据构建哈夫曼树,并将其存储到文件`hfmtree.dat`。 3. 哈夫曼编码模块:...

    汉字字符编码 区位码 GB2312 GB18030-2005及Unicode 8.0字符集

    在中文信息处理领域,有几种重要的字符编码标准,包括区位码、GB2312、GB18030-2005以及Unicode 8.0。 区位码是早期中国计算机汉字编码的一种方式,它由两个字节组成,每个字节对应一个四位的十进制数,分别代表...

    Java中编码方式和Unicode知识总结

    - 编码字符集:根据字符集内字符的多少,确定用几个字节来编码。 - 被编码过的字符集:限定了一组明确字符的字符集,也叫编码字符集。 3. ASCII字符集 - ASCII字符集是基于罗马字母表的一套电脑编码系统,由美国...

    JAVA 转换字符编码工具

    总结来说,`JAVA 转换字符编码工具`是利用Java语言实现的字符编码转换程序,通过提供的源代码文件可以学习到如何在Java中进行编码转换操作,以及如何设计和测试这样的工具。这个工具对于处理多语言环境或跨平台通信...

    常用的几种编码格式

    它是一种国际化的字符编码标准,旨在提供一种统一的字符编码方案。Unicode 支持世界上几乎所有语言的字符集,包括中文、日文、韩文等非拉丁语系的文字。Unicode 采用可变长度的编码方式,最常见的是UTF-8、UTF-16和...

    js对中文字符串进行gb2312编码解码

    在JavaScript(JS)中,处理中文字符编码是一个常见的需求,特别是在与服务器交互或者处理文本数据时。GB2312编码是一种在中国大陆广泛使用的简体中文字符集,它包含了6763个常用汉字和一些其他字符。在JavaScript中...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    本文将详细介绍几种常见的字符编码(Unicode, ISO-8859-1, GBK, UTF-8)及其在Java中的应用,并讨论它们之间的相互转换方法。 #### 1. Unicode Unicode是一种国际标准字符集,它为每一个字符分配了一个唯一的数字,...

    计算机字符编码.pdf

    总结来说,字符编码是计算机处理文字信息的核心,从早期的ASCII到现在的Unicode,编码技术不断演进,以适应全球化的信息交流需求。理解字符编码原理对于解决乱码问题、进行跨平台文件交换以及开发多语言软件至关重要...

    Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    总结,理解和掌握字符编码转换在Qt开发中至关重要,特别是处理多语言文本、串口通信或与其他系统交互时。确保正确地进行编码转换,可以避免乱码问题,提高软件的兼容性和稳定性。在实际编程中,应根据需求选择合适的...

    数据结构-哈夫曼编码器

    构建哈夫曼树的过程主要包括以下几个步骤: 1. **统计频率**:首先,我们需要统计输入数据中各个字符或符号的出现频率。 2. **构建优先队列**:将每个字符作为一个节点,频率作为权重,用优先队列(通常使用最小堆...

    6674个汉字编码表

    Unicode是一种国际化的字符编码标准,它为每一个字符分配了一个唯一的数字。本文将详细介绍一个包含6674个汉字的Unicode编码表,并解释这些编码的含义及其应用。 #### 二、Unicode编码介绍 **Unicode** 是一种用于...

Global site tag (gtag.js) - Google Analytics