四月 1, 2007

尽管有很多规范URL的标准,例如RFC 3987,但实际应用中却非常混乱。本文主要介绍浏览器发送URL到服务器的一些特性,作为开发和应用的参考。

通常浏览器会用两种编码方式发送URL到服务器,分别是UTF-8和ANSI(当前系统语言设置,在Windows系统中可以理解为当前代码页)。接下来分别介绍几种常用浏览器发送URL的编码特性。

一、直接在地址栏输入URL的情况

中文Windows环境下,假如直接在浏览器的地址栏输入URL:

http://www.charset.cn/中国.html?kw=中国

  1. IE浏览器特性
    PATH部分 参数部分
    UTF-8模式(默认) %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode GBK编码、无urlencode
    ANSI模式 中国.html kw=中国
      GBK编码、无urlencode GBK编码、无urlencode
  2. 中文Windows环境下,IE中默认发送的URL的PATH部分是UTF-8编码,参数部分是GBK编码。IE的设置选项中有一项是“总是以 UTF-8 发送URL”可以改变发送URL的编码为ANSI。

  3. FireFox浏览器特性
    PATH部分 参数部分
    UTF-8模式 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode
    ANSI模式(默认) %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK编码、urlencode GBK编码、urlencode
  4. 中文Windows环境下FireFox中默认发送的URL的PATH和参数都是GBK编码,在FireFox地址栏输入“about:config”,找到选项“network.standard-url.encode-utf8”,即可改变发送URL的编码方式。

  5. Opera浏览器特性
    PATH部分 参数部分
    UTF-8模式(默认) %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode

二、来自网页中的链接

在不同的浏览器中打开不同编码的网页中的链接,特性也不相同。在不改变浏览器默认选项情况下访问不同编码的网页中以下链接:

http://www.charset.cn/中国.html?kw=中国

  1. IE浏览器特性
    PATH部分 参数部分
    UTF-8网页 %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode UTF-8编码、无urlencode
    GBK网页 %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode GBK编码、无urlencode
  2. FireFox浏览器特性
    PATH部分 参数部分
    UTF-8网页 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode
    GBK网页 %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK编码、urlencode GBK编码、urlencode

如果改变IE默认选项为ANSI模式或者将FireFox改为UTF-8模式的访问结果可以自己测试。

几点说明:

  1. 对于开发人员而言,一定要考虑到不同环境下URL编码的不同,才能实现系统更好的兼容性。兼容性好的系统必须要能够识别来自客户端URL的编码,才能正确处理。
    例如在Opera浏览器地址栏直接输入“http://www.baidu.com/s?wd=我们”,就会发现不能正确访问。
  2. 不同的WEB服务器对各种编码的URL处理也不相同,尽量不要使用中文字符作文件名。
  3. 如果写入网页中的链接包括中文字符,最好使用urlencode处理,才能和当前网页编码无关。否则有可能不能正确访问。
  4. 很多情况下浏览器的地址栏看到URL并不等同于发送到服务器的URL。要正确查看浏览器发送的到服务器URL,最好借助一些工具分析HTTP的请求头。
三月 31, 2007

字符(Charcter)是文字与符号的总称,包括文字、图形符号、数学符号等。

一组抽象字符的集合就是字符集(Charset)。字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。字符集的子集也是字符集。

计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding)。制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。

因为制定编码的同时往往也制定了字符集,所以经常把字符集和编码混为一谈,具体区分细节不用细究。

三月 29, 2007

欢迎来到Charset.cn!

十月 30, 2006

谢谢cb!

十月 29, 2006

在 Ubuntu 之后 - 采访 Ubuntu 开发者 Daniel Silverstone #

伟大的程序员这样回答…… #

十月 3, 2006

youtube的火爆催生了许多视频网站,像国内的六间房土豆网等。这些视频站只提供在线浏览的服务,不提供视频文件下载地址。本文整合了一些离线播放视频的资源,方便有离线播放需求的用户。

1、视频网站的背后

用户录制、上传的各种格式的视频文件在服务器后台通常被统一转换为flv格式的视频文件。视频播放页面里嵌入了一个Flash播放器,播放页面传给Flash播放器不同的参数从而播放不同的后台视频文件。离线播放主要是找到后台的flv格式的视频文件。

2、视频文件获取

以下几个网站提供了获取flv文件地址的服务,适用不同的视频网站。基本操作都是通过输入的播放页面URL得到flv文件的下载地址

http://www.quchao.com/video/
http://javimoya.com/blog/youtube_en.php
http://keepvid.com/

视客(Vlogio)是一款客户端软件,可以下载youtubeGoogle Video的视频文件。

youtube-dl是用Python写的一段脚本,可以显示youtube网站flv文件地址并下载。整合其他的unix工具非常有用。

3、FLV文件播放

FLV Player是一款本地播放器,Mplayervlc也可以选用。暴风影音据说也可以,只是我从来不用。想在浏览器里嵌入Flash播放器来播放本地flv文件的话,不妨试试Flash Video (FLV) Player。当然,也可以将flv文件转为其他格式并选用相应的播放器。转换工具可以试试FFMpeg

« 上一页下一页 »