在面试中被问到一个问题:既然unicode编码方式已经能表示所有的文字,为什么还要使用UTF7,UTF8等编码方式呢?
解决方案 »
- 请问我如何做一个可以升级的安装包
- access 数据库 大家来帮帮忙
- 后台调用JS出现的问题,大家帮忙看看,好怪
- 关于master页面的菜单显示
- 本地与远程数据即时同步的问题
- ______________如何用ViewState或者session或者其它方法保存和恢复结构体数组,谢谢前辈们!
- 关于使用业务对象中的类的问题
- 如何使用webchart绘制柱状图形?
- Panel里面的table,定位问题
- 如何在程序文件中调用存储过程???需要注意什么东西?
- 急呀,发现不明确的匹配。
- 我的天!可怕的错误,在本机上调试把GridView数据导入到Excel后(无论是点打开\保存\取消)浏览的IE页面马上没有了,好象是被删除了,怎么回事?
Unicode可以显示中文简体,也可以显示日文
但是,一个页面上如果同时有中文简体和日文,那它将只能选择一种,另一种是乱码
如果要同时显示多种语言字符,只能用UTF以下论点没有考究,是我自己认为的
UTF-8和GB2312、BIG5等一样,是字符集,都是Unicode的子集
所以这个问题本身就有问题
unicode 是标准的,但是他是16位存储的,虽然它能表示所有的字符,但文件太大,代价太高.而 UTF-8显示的时候,英文的为8位,其他的为16位,节省了点空间.不知道UTF-7是不是和8一样的.
Encoding.UTF8.GetByteCount("你好") 你去试一下结果是多少
UTF-8的单个字符存储长度确实是随编码区段而变的,但绝对不节约
2,没有一种编码方式能完全取代别的编码方式,如.js文件如果不用UTF-8格式的话就经常会出错
当然要用UTF8之类的了UNICODE好像都是2字节的吧刚好手边有本《字符串和正则表达式参考手册》,看了一下,摘录一段:“UNICODE采用2字节的编码方式,可以代表256X256个字符。但是,提高使用的灵活性必然会耗费大量的储存空间。UNICODE文本文件是ASCII文件容量的两倍,起内存空间也是如此。”答案就如此类似吧。
如果charset为gb2312,被引用的js是utf-8,出现unicode字符照样是乱码。但一般不会出错,因为unicode一般只出现在字符串中,不太容易引起语法错误。
回答這個問題,要瞭解什麼是Unicode: 在所有字元集中,最知名可能要數被稱為ASCII的7位字元集了。它是美國資訊交換標準委員會(American Standards Committee for Information Interchange)的縮寫, 為美國英語通信所設計。它由128個字元組成,包括大小寫字母、數位0-9、標點符號、非列印字元(換行符、跳位字元等4個)以及控制字元(退格、響鈴等)組成。
由於所ASCII不能容納更多的字元集(比如漢字和其他國家的語言字),所以就出現Unicode.
Unicode是一種字元編碼方法,由國際組織設計,可以容納全世界所有語言文字的編碼方案。Unicode的學名是"Universal Multiple-Octet Coded Character Set",簡稱為UCS。UCS可以看作是"Unicode Character Set"的縮寫. 事實證明,對可以用ASCII表示的字元使用UNICODE並不高效,因為UNICODE比ASCII佔用大一倍的空間,而對ASCII來說高位元組的0對他毫無用處。為了解決這個問題,就出現了一些中間格式的字元集,他們被稱為通用轉換格式,既UTF(Universal Transformation Format)。目前存在的UTF格式有:UTF-7, UTF-7.5, UTF-8, UTF-16, 以及 UTF-32。所以UTF是UNICODE的編碼標準.UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。
UFT-8转换表表示如下:
UNICODE UTF-8
00000000 - 0000007F 0xxxxxxx
00000080 - 000007FF 110xxxxx 10xxxxxx
00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001
而目前的传输系统是单字节的,
utf-8是一个过渡的桥梁。
ut-8是变长的编码方式,编码长度从1-4字节不等,由于出现频率越高的字符长度越短,因此可以缩短编码长度。
utf-7似乎是为了兼容一些旧的7位编码而设的,具体我也不太清楚。google一下,都能找到。
utf-8,utf-7都是unicode的一种编码方式,因为目前的传输系统是单字节的,所以比unicode有更好的编码性能、可扩展性能、安全性能、更少的误码率和更好的纠错性能,特别是对于多字节数据!
UTF-8 是卡车
Unicode 是标准集装箱车
都是车,按需要选用
to 楼上: UTF-8下汉字是三字节的,更长,节省存储空间?
Encoding.UTF8.GetByteCount("你好") 你去试一下结果是多少
UTF-8的单个字符存储长度确实是随编码区段而变的,但绝对不节约
------------------------------------------------------------------------
这是国际组织编写的编码规则,不是中国人制定的,仔细看:xiwang6428() 的参照表,utf-8他的制定就是为了动态的分配字节处理字符,"用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。"这就是说utf-8的原因.