百度搜索“”,然后貌似Unicode越界了,Google正常,这是因为百度使用gbk的缘故还是真的使用了传说中的3位 Unicode? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SolidZORO
V2EX    问与答

百度搜索“”,然后貌似Unicode越界了,Google正常,这是因为百度使用gbk的缘故还是真的使用了传说中的3位 Unicode?

  •  
  •   SolidZORO 2011-03-10 20:59:52 +08:00 5379 次点击
    这是一个创建于 5340 天前的主题,其中的信息可能已经有所发展或是发生改变。
    10 条回复    1970-01-01 08:00:00 +08:00
    SolidZORO
        1
    SolidZORO  
    OP
       2011-03-10 21:02:39 +08:00
    后来试了一下搜索 “”。变成了“无敌”。 看来baidu是在简/繁转换的时候把自己给搞挂了。导致了悲剧发生。
    freefcw
        2
    freefcw  
       2011-03-10 21:18:21 +08:00
    寨厂内部人士说,内部编码太多, suggestion 支持搜索不支持
    est
        3
    est  
       2011-03-10 21:54:47 +08:00
    @SolidZORO 这个出错应该是浏览器编码请求之前就出错了。但是gbk里这两个字的确是3byte编码。
    est
        4
    est  
       2011-03-10 22:02:08 +08:00
    这个可能是windows的特例?因为 是GB 18030 里的。然后windows下的gbk默认就是gb18030,而且有3、4字节。
    SolidZORO
        5
    SolidZORO  
    OP
       2011-03-10 23:31:45 +08:00
    @est 出错原因应该是:打个比方把。 我们要搜索AAA。
    输入AAA的时候,点搜索。
    AAA被发送到服务器,通过内部转换程式转换,变成aaa。
    但是由于AAA没有对应的aaa,或者软件不够智能(比如编码溢出,AAA是UTF8,但是程序只支持GBK-,那么UFT8的字符-必然出错了)。
    最后导致了显示搜索结果错误。


    其实搜索 【】或者【】都不会错的。就算给她搭上【a】这样搜索也都还是会转对的。但是两个粘起来,就错了。这是为什么呢?

    【】变成了 【e r】三个字符er中间有空格。


    216322;;U+9F5F
    216327;;U+9F6C

    e:101;e;U+0065
    :32; ;U+0020
    r:114;r;U+0072



    再来看看编码范围;
    ----------------------------------------------
    GBK
    编码范围: 0×8140 - 0xFEFE

    BIG5
    编码范围: 0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE


    编码范围: 0xA1A1 - 0xFEFE
    汉字范围: 0xB0A1 - 0xF7FE

    GB18030
    编码范围:
    单字节、是0x00-0x7F,完全等同与ASCII;
    双字节、编码范围和GBK相同,高字节是0x81-0xFE,低字节的编码范围是0x40 -0x7E和0x80-FE;
    四字节、编码编码中第一、三字节的编码范围是0x81-0xFE,

    Unicode
    编码范围:
    0-0x10FFFF,这个是个很大的值了。
    -------------------------------------------------------

    216322;;U+9F5F
    216327;;U+9F6C

    很显然。他们在GBK,GB18030,和Unicode里面。就是不在里。

    但是问题应该不是出在这里,而单输入也能正常的识别,证明问题也不是繁简转换字码的问题。

    打开Unicode发现是靠后CJK编码很后的字了。右边再过不到100个字符,CJK就完了。 估计百度写程序的时候没有考虑到很大的位数link起来。比如他们link起来之后就是 9F5F9F6C的小bug问题。就给越界了。

    但是问题,【龃】他们又得到正确的显示。这个我就真不知道为什么了。



    还得请高手作答。
    zainix
        6
    zainix  
       2011-03-11 11:56:46 +08:00
    PN + Google吧, 用百度能做什么!?
    lianghai
        7
    lianghai  
       2011-03-11 12:42:33 +08:00
    赞考据。不过,“3 位 Unicode”是什么?
    SolidZORO
        8
    SolidZORO  
    OP
       2011-03-11 18:55:36 +08:00
    理论上 一个汉字可以由2byte搞定,当然,这是在下。
    而在Unicode下,是4byte。

    有人为了减少储存空间(同事也提高了搜寻的效率)。给Unicode动了一下手脚,把原来Unicode范围\0x000000 ~ \0x10FFFF,改成最常用的范围: \0x0000 ~ \0x10FF,(其实最常用的字符在\0x4E00 ~\0x9FA5,即CJK Unified Ideographs。)

    这样显示,Big5什么的都没问题了。
    lianghai
        9
    lianghai  
       2011-03-11 21:15:19 +08:00
    @SolidZORO 我还是没明白……
    Unicode 本身不规定具体的编码方式啊,现在常用的编码是 UTF-8、UTF-16 和 UTF-32。UTF-8 里每个字符使用的字节数是 1 或 3 或 4,UTF-16 用的是 2 或 4,而 UTF-32 是 4。你说的是 UTF-16 模式的汉字?
    “动了一下手脚”指的又具体是什么?
    SolidZORO
        10
    SolidZORO  
    OP
       2011-03-11 22:57:12 +08:00
    @lianghai 也就是 固定3byte。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3110 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 11:36 PVG 19:36 LAX 04:36 JFK 07:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86