码迷,mamicode.com
首页 > 其他好文 > 详细

乱码,乱码

时间:2016-12-01 22:39:13      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:计算   服务   pen   for   方法   .net   实际应用   技术分享   冲突   

当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。计算机处理文本,就必须把文本转换为二进制才能处理。

一、字符编码

早期计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。

1. ASCII码

ASCII(美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。比如大写字母A的编码是65,小写字母a的编码是97。由于标准ASCII字符集字符数目有限,在实际应用中往往无法满足要求。

2. Unicode

至于汉字,不同的字符集用的ASCII码的范围也不一样,常用的汉字字符集有GB2312、GBK,至少需要两个字节。全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。解决了传统的字符编码方案的局限性,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

3. ASCII编码和Unicode编码的区别

ASCII编码是1个字节,而Unicode编码通常是2个字节。

  • 字母“A”用ASCII编码是十进制的65,二进制的01000001;
  • 汉字“中“已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。

如果把ASCII编码的”A“用Unicode编码,只需要在前面补0就可以,因此,”A“的Unicode编码是00000000 01000001。

4. UTF-8

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

5. UTF-8、UTF-16、UTF-32区别

  • UTF-8是一种针对Unicode的可变长度字符编码,英文字母被编码成1个字节,汉字通常是3个字节,节省空间;
  • UTF-32每个字符都使用4字节,字节内容一一对应码点,转换规则简单直观,查找效率高;
  • UTF-16字符要么是2个字节,要么是4个字节。

二、编码转换

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
示例:用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
技术分享
示例:浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
技术分享
<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

三、JavaScript中的编码

1. 字符串长度

技术分享
注意:汉字技术分享的码点是0x20BB7,UTF-16编码为0xD842 0xDFB7(十进制为55362 57271),需要4个字节储存。对于这种4个字节的字符,JavaScript不能正确处理,字符串长度会误判为2。

2. 访问字符串中特定字符的方法

技术分享
注意:”≈”,charAt方法无法读取整个字符

3. ES6提供了正确处理4个字节储存的字符

技术分享

特别说明:由于CSDN博客编码问题,导致文中”??”(技术分享)无法正常展示,所以只能使用截图。实属无奈,敬请谅解!!!

乱码,乱码

标签:计算   服务   pen   for   方法   .net   实际应用   技术分享   冲突   

原文地址:http://blog.csdn.net/ligang2585116/article/details/53420091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!