在面试中被问到一个问题:既然unicode编码方式已经能表示所有的文字,为什么还要使用UTF7,UTF8等编码方式呢?

解决方案 »

  1.   

    里面的概念不太会讲,但是实际作用大致如下举例讲
    Unicode可以显示中文简体,也可以显示日文
    但是,一个页面上如果同时有中文简体和日文,那它将只能选择一种,另一种是乱码
    如果要同时显示多种语言字符,只能用UTF以下论点没有考究,是我自己认为的
    UTF-8和GB2312、BIG5等一样,是字符集,都是Unicode的子集
    所以这个问题本身就有问题
      

  2.   

    答案是:
    unicode 是标准的,但是他是16位存储的,虽然它能表示所有的字符,但文件太大,代价太高.而 UTF-8显示的时候,英文的为8位,其他的为16位,节省了点空间.不知道UTF-7是不是和8一样的.
      

  3.   

    to 楼上: UTF-8下汉字是三字节的,更长,节省存储空间?
    Encoding.UTF8.GetByteCount("你好") 你去试一下结果是多少
    UTF-8的单个字符存储长度确实是随编码区段而变的,但绝对不节约
      

  4.   

    1,多种编码的使用是为了适应不同语言在同一网页当中共同表现
    2,没有一种编码方式能完全取代别的编码方式,如.js文件如果不用UTF-8格式的话就经常会出错
      

  5.   

    UTF8英语字母是1字节啊 还有其他符号
    当然要用UTF8之类的了UNICODE好像都是2字节的吧刚好手边有本《字符串和正则表达式参考手册》,看了一下,摘录一段:“UNICODE采用2字节的编码方式,可以代表256X256个字符。但是,提高使用的灵活性必然会耗费大量的储存空间。UNICODE文本文件是ASCII文件容量的两倍,起内存空间也是如此。”答案就如此类似吧。
      

  6.   

    Encoding.UTF8.GetByteCount("你好") 是6字节没错,但是"aa"就2字节了。encoding.unicode你好还是aa都4字节
      

  7.   

    后面一句话不太赞同宿主页的charset是什么,js文件的编码保存类型也必须是什么,必须一致,不是说用utf-8保存就是万能的
    如果charset为gb2312,被引用的js是utf-8,出现unicode字符照样是乱码。但一般不会出错,因为unicode一般只出现在字符串中,不太容易引起语法错误。
      

  8.   


    回答這個問題,要瞭解什麼是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
      

  9.   

    unicode是编码方式,utf8 utf16 utf32是存储或传输的规则。
      

  10.   

    unicode 是双字节的,
    而目前的传输系统是单字节的,
    utf-8是一个过渡的桥梁。
      

  11.   

    utf-8,utf-7都是unicode的一种编码方式,由于unicode是由两个字节组成的,因此即使高位是0也要占用2个字节,是比较浪费空间的,特别是对于英文和欧洲的一些文字。
    ut-8是变长的编码方式,编码长度从1-4字节不等,由于出现频率越高的字符长度越短,因此可以缩短编码长度。
    utf-7似乎是为了兼容一些旧的7位编码而设的,具体我也不太清楚。google一下,都能找到。
      

  12.   

    ASCII的对多字节文字适应性不够 重码率高
    utf-8,utf-7都是unicode的一种编码方式,因为目前的传输系统是单字节的,所以比unicode有更好的编码性能、可扩展性能、安全性能、更少的误码率和更好的纠错性能,特别是对于多字节数据!
      

  13.   

    UTF-7 是拖拉机
    UTF-8 是卡车
    Unicode 是标准集装箱车
    都是车,按需要选用
      

  14.   

    underwater(Never be afraid of bricks) ( ) 信誉:100    Blog  2006-10-11 15:23:56  得分: 0  
      
    to 楼上: UTF-8下汉字是三字节的,更长,节省存储空间?
    Encoding.UTF8.GetByteCount("你好") 你去试一下结果是多少
    UTF-8的单个字符存储长度确实是随编码区段而变的,但绝对不节约
    ------------------------------------------------------------------------
    这是国际组织编写的编码规则,不是中国人制定的,仔细看:xiwang6428() 的参照表,utf-8他的制定就是为了动态的分配字节处理字符,"用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。"这就是说utf-8的原因.
      

  15.   

    更正:这就是说utf-8节省空间的原因