现在的位置: 首页 > 综合 > 正文

关于UTF-8和UNICODE的自动识别

2014年02月16日 ⁄ 综合 ⁄ 共 1988字 ⁄ 字号 评论关闭

知识:

BIG ENDIAN:最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。  

LITTLE ENDIAN:最低位地址存放低位字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。

unicode 格式文件前导2字节:

FE FF ----- BIG ENDIAN

FF FE -----LITTLE ENDIAN

UTF-8 格式文件前导3字节:

EF BB BF

ASCII格式文件无前导字符。

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>编码测试</title>
</head>

<body>
<script language="javascript">
	function padding(chr,len){
		var l = len - chr.length;
		
		var r = chr;
		for(var i=0;i<l;i++){
			r = '0'+ r;
		}
		
		//alert(chr);
		return r;
	}


	function test(){
		var str = "FF EE E6 54 E9 54 2F 55 64 55 65 55 66 55";
		var a = str.split(" ");
	//	alert(a.length);
		
		var result = "";
		
		for(var i=0;i<a.length;i++){
			var b = parseInt(a[i],16);
			var c = b.toString(2) + ' ';
			
			result += padding(c,8);
			//alert(c);
		}
		
		alert(result);
	}


	function test2(){
		var str = '哦哩唯啤啥啦';
		
		var result = "";
		
		for(var i=0;i<str.length;i++){
			var b = str.charCodeAt(i);
			var c = b.toString(16) + ' ';
			//alert(c);
			result += c.toUpperCase();
		}
		
		alert(result);
	}
	
	
	function test3(){
		var a = 0x54e6;
		alert(String.fromCharCode(a));
	}
	
	//test();
	//test2();
	test3();
	
</script>
</body>

</html>

参考:

Unicode用一个2字节数字表示每个字符,从0到65535。每个 2 字节数字表示至少在一种世界语言中使用的一个唯一字符。(在多种语言中都使用的字符具有相同的数字码。)这样就确保每个字符一个数字,并且每个数字一个字符。Unicode数据永远不会模棱两可。Unicode使用相同的数字表示ASCII和ISO-8859-1中的字符。只是这两种编码用一个字节表示,而Unicode用两个字节表示。所以Unicode表示这两种编码的字符时只要用低字节就可以了,高字节为0。

UTF-8是一种变长的编码方式,每个UTF-8的编码可以是1至6个字节长。它将Unicode编码的字符采用变长的方式进行编码。对Unicode中属于ISO-8859-1的编码采用和ISO-8859-1相同的单字节编码。其他字符采用两字节以上的编码。实际上对于两个字节的Unicode编码,UTF-8只要三个字节即可表示。第一个字节由n个1(1< n <= 6)开始, n表示编码的字节数,后面每个字节都以10开始,后面6位为有效位。将第一位的剩余位和后面的所有字节的后六位连接起来就是对应的Unicode编码的数值。例如汉字“中”的编码:

Unicode:           4E      2D

01001110 00101101

UTF-8:              E4      B8     AD

11100100 10111000 10101101

可以通过以下方式进行证实:

       用记事本创建一个文本文件,输入汉字“中”分别保存为Unicode格式和UTF-8格式。 将UltraEdit的自动识别UTF-8文件格式选项禁止,然后用其打开这两个文件,选用二进制查看方式,可以看到:

    UTF-8格式文件编码为“EF BB BF E4 B8 AD”。其中有个三字节的前缀“EF BB BF”,这是UTF-8格式文本文件的标识。不过这个前缀不要,某些文本查看软件也可以通过编码判断出UTF-8格式。“E4 B8 AD”就是“中”的UTF-8编码。

    Unicode格式的文件的完整编码是“FF FE 2D 4E”。前面有个双字节前缀“FF FE”,这是Unicode格式文本文档的编码标识。而我们看到的编码是“2D 4E”,而不是如我前面所说的“4E 2D”,为什么呢?因为数字是按照低字节在先高字节在后的顺序存储的,所以实际的Unicode编码恰恰是“4E2D”。

因此自动识别这两种编码其实是很容易的事情。没有那么神秘高深;P

抱歉!评论已关闭.