本页主题: [问题]%E4%B8%AD……之类的是什么中文编码? 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19901 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 [问题]%E4%B8%AD……之类的是什么中文编码?

%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81

以上编码乃是“中文编码”四字,用过Google的人都不陌生

那么,这种编码是什么编码?通过什么来被系统支持?
Posted: 2004-06-05 09:27 | [楼 主]
bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19901 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 

多谢 ^^

按这个解说查找相关资料,知道了不少东西——

Google 以前的解码方式是:
Quote:
设想一下如何设计一个全球的论坛系统:可以让中文和日文的用户都可以方便的浏览发表呢?在数据中间处理阶段应 该以那种字符集存储呢?答案很简单:UniCode。以前很多文章都有关于如何设计一个国际化界面的介绍,只是应用的本地化界面输出,但很少提及数据在中间处理过程中如何适应国际化。

输入和存储阶段就用UniCode方式进行处理和存储,以方便应用以后的国际化。GOOGLE的设计就是一个非常好的国际化应用榜样,我以GOOGLE搜索引擎的国际化支持为例说明如何实现国际化应用 的设计。

GOOGLE用户经常有这样的感觉:

首先我将GOOGLE对查询的处理流程简单的说明如下:
    [*]客户端浏览器输入;[*]查询字符串按客户端系统编码方式(GBK)转换成字节流,并URL Encode后传给GOOGLE;
    [*]GOOLGE将输入的字符串URL Decode后,按照客户端的系统编码方式将这个字符串(字节串)解码成UniCode
    [*]查询过程,完全是基于UniCode的匹配过程,比如对于“中文”这2个字在简体繁体中文和日文里都有,因此无论是何种语言的页面包含这2个字的页面都能匹配上。
    [*]结果集输出:将查询结果集的内容(UNICODE)按客户端系统编码方式(GBK)“编码”成的字节流,返回给浏览器

具体说明:

GOOGLE如何识别出浏览器使用的“界面语言”:GOOGLE获得这个查询字符串的同时,一般会根据hl=zh-CN这个参数,知道了客户端使用的字符集编码方式,如果用户第一次访问:GOOGLE会根据 浏览器的发送的请求中包含的Accept language: zh_cn这个头信息来判别,这就是为什么现在很多用户第一次去GOOGLE的时候它就能自动识别出来的原因。这个参数在之后的查询和翻页过程中通 过cookie保存,并通过get方式一直传递给GOOGLE(因此你也可以使用使用偏好设置界面语言),从而可靠地识别出客户端的编码方式。
GOOGLE如何查询:也许从URL上你可以看到:传过去的“秘密”这个查询实际上是%C3%D8%C3%DC=>"秘密"这2个字按GBK(WINDOWS客户端缺省的编码方式)编码方式的4个字节然后再URLEncode 后的形式(关于中文编码方式请参考:汉字的编码方式),GOOGLE将查询字符串按这个编码方式解码并转成UniCode,然后用这个UniCode编码方式的字符串进行内部的查询操作。而任何语言 的页面都是先转换成UniCode后存储在GOOGLE的数据索引库里的。在UniCode中日文和中文写法一样的字,用的是同样的编码。因此,如果你没有指定语言过滤的话,日文网页的结果就首先被命 中了;因此,对于中文客户端的查询:如果相应字符在UniCode中和繁体,日文映射的字一样,就可以匹配到相应的日文网页,繁体中文网页...,GOOGLE的查询结果也首先是UniCode的,最后将 UniCode结果按照客户端的编码方式转换成字节流,返回到客户端。

从以上的分析中我们可以看出:UniCode非常漂亮的解决了应用的国际化问题。对于应用前端来说,剩下的工作就是根据本地编码环境进行本地化的过程了。

数据从输入的开始,就全部先转换成UniCode,然后再进行处理,并按照UniCode方式集中存储(UniCode inside)
数据输出过程中,只是在最后输出到客户端的时候,按照客户端的本地化设置将UniCode数据转换成本地字符集,并配以相应语言/字符的界面(Localization outside)

如果应用的开发只是满足于在国内市场自给自足,“汉化”的思路的大量出现是很自然的。但要是把“汉化”比作UCDOS和RichWin的话,那么这种汉化方式迟早要被内核汉化的WIN95淘汰的。毕竟核心级别对 国际化的支持才是一个真正简化前端应用设计、通用的解决方案。Microsoft和Sun等国际化大公司的产品从一开始就是为全球市场设计的,因此对国际化的支持一致非常重视。相比之下国内软件行业对相 应国际标准显然重视不足,也很少积极地参与相关标准制定。



source: http://www.chedong.com/tech/unicode_java.html#google


升级后的解码方式是:
Quote:
GOOGLE的国际化做得很好。我们知道,你在www.google.com 里面输入一个检索词,然后便会生成一个HTTP的GET请求。这个请求一般有几个参数,以前的http://www.google.com/search?q=%s就是最简单的一个,%s就是用来代替你输入的值的。但GOOGLE是一个面对全球服务的站点。它收到请求后会解释q的值。如果大家写过JSP或者JAVA程序,就会经 常陪到getParameter得到的中文是乱码。这里面就是一个编码问题。浏览器的地址栏内的URL,一切非正常字符(A- z,0-9,:,.等)都会进行编码(Encode,一个%号,然后加上它的ASCII内码,一个中文一般会编码成为两个,如“中 文”两个字会编码为:%D6%D0%CE%C4)然后程序收到请求后会进行相应的解码。
GOOGLE近期改进了它的编码方案,即是在生成URL的时候,由客户端按照指定的编码进行Encode,查看 www.google.com主页的源文件,你会发觉encodeURIComponent这个Javascript的函数。默认情况下,会用Javascript的 功能,把输入的检索词进行UTF-8编码,“中文”两个字就会编码成:%E4%B8%AD%E6%96%87,一个六个字节。这时如果 还是按照四个字节进行解码,就会出错,也就是乱码。可以对比默认情况下的编码,是四个字节。具体关于字符编码的 内容,就不在这里讨论。

再来看Google配置检索式的时候的几个参数:
    [*]ACTION地址: http://www.google.com/search?
    [*]q 检索的词,即你在输入框内输入的内容,会进行URL Encode编码
    [*]lr 检索范围。如“lr=”表示检索所有的网站,lr=lang_zh-CN表示检索中文简体,lr=lang_zh-CN|lang_zh-TW表示 中文网页(简繁)
    [*]ie 指示浏览器URL的编码,Google会将q的值按照这个编码来进行解码(这个最重要)
    [*]oe Outlook的编码??(这个参数暂不清楚什么意思,目前对检索没有影响,直接给一个值,或者不要也行

这时就可以按需进行组合了,名和值之前为“=”,每个之间以“&”进行连接
如:http://www.google.com/search?q=%s&ie=GB2312&lr=lang_zh-CN[/url]|lang_zh-TW
  意思为:浏览器的URL编码为GB2312,检索范围为“中文网页”

  http://www.google.com/search?q=%s&ie=UTF-8&lr=lang_zh-CN
  意思为:浏览器的URL编码为UTF-8,检索范围为“简体中文网页”

如果是检索图像,把search换成images就行了,其它不变。
  http://images.google.com/images?q=%s&ie=UTF-8&lr=lang_zh-CN



source: http://goto.biz01.net/readnews.asp?newsid=215


顺便也搞明白置顶贴“Google中文搜索成功升级!MyIE2须作改动”的原理是什么了

这篇文章挺好看,荐一下:从汉化到国际化——UniCode inside, Localization outsite
Posted: 2004-06-06 19:04 | 1 楼
帖子浏览记录 版块浏览记录
狗狗静电BBS - wwW.DoGGiEhoMe.CoM » 电脑全方位 Computer Guide

沪ICP备05008186号
Powered by PHPWind Styled by MagiColor