关闭

中文路径问题,中文url

标签: url服务器apacheiispython测试
1634人阅读 评论(0) 收藏 举报
分类:

中文路径问题中文url

在使用railswebrick过程中碰到中文url问题,原本认为很简单事情其实并不简单。为了了解中文路径问题,特别在apache,iis下面做了试验。过程如下:

首先要准备好gb2312和utf-8文件名。这里使用python来获得。


>>> s_gb='我.txt'
>>> print s_gb
我.txt
>>> s_gb
'/xce/xd2.txt'
>>> s_unicode = s_gb.decode('gb2312')
>>> s_unicode
u'/u6211.txt'
>>> s_utf8 = s_unicode.encode('utf-8')
>>> s_utf8
'/xe6/x88/x91.txt'
>>> rs_gb=r'/xce/xd2.txt'
>>> rs_gb
'//xce//xd2.txt'
>>> rs_gb.replace('//x','%')
'%ce%d2.txt'
>>> rs_utf8 = r'/xe6/x88/x91.txt'
>>> rs_utf8.replace("//x","%")
'%e6%88%91.txt'

好了,到此为止已经获得了"我.txt"用不同编码encode之后名称,分别是'%ce%d2.txt'(gb2312)和'%e6%88%91.txt'(utf-8)。
现在将'我.txt'放置到web服务器上去,比如说是web根目录下面。然后分别通过http://localhost/%ce%d2.txt和http://localhost/%e6%88%91.txt去访问。

一、IIS服务器。
两种方法都可以访问。由此可见IIS服务器具有某种识别机制,做出正确选择。

二、apache服务器
用utf-8编码可以访问,用gb2312不可以访问。这个结果出乎我意料,毫无疑问文件系统上"我.txt"名称是以gb2312编码,反而用utf-8可以访问?也许apache为了适应各种各样平台,而有它特殊考虑。这个apache服务器只是在我windows2000服务器上测试,没有在linux获其它系统下测试,不过要测试也很简单。

三、railswebrick
webrick就很简单了,你必须和文件系统上文件名编码一致。用下面python代码可以在文件系统上建立一个以utf-8编码文件名'她.txt',当然如果你用windows资源管理器去查看话会是乱码。

>>> s='她.txt'
>>> su=s.decode('gb2312').encode('utf-8')
>>> su
'/xe5/xa5/xb9/xe7/x9a/x84.txt'
>>> f = open("c:///xe5/xa5/xb9/xe7/x9a/x84.txt",'w')
>>> f.write('abc')
>>> f.close()

然后将这个文件放置到webrick根目录下面,通过http://localhost/%e5%a5%b9%e7%9a%84.txt就可以访问。
这个例子当中需要注意是,操作系统不总是允许你用不同编码用作文件名,比如你用'她.txt'就不行。

通过这些测试之后,应该知道只有将中文文件名文件在IIS下面,才能保证任何情况下都能正常访问。

这里任何情况包括:
  1. 通过您自己站点
  2. 别人将连接放在别人网站上。

第一种情况下,三种服务器都可以做到。比如,对于apache服务器,只要将有中文连接页面都设置成utf-8编码,而文件系统上文件名是gb2312编码即可。而对于webrick,只要将页面设置成gb2312,文件系统名也是gb2312即可。真吗?其实有例外,比如用ie来访问,并且ie设置成总是以utf-8发送话。但是webrick可以将页面设置成utf-8,然后将文件名也设置成utf-8即可。但这前提是文件系统必须是utf-8编码文件名,比如novellsles(这个我知道,其它不知道)等。

在第二种情况下,你无法控制别人网站用什么编码显示,所以IIS是唯一选择。

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:110564次
    • 积分:1441
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:26篇
    • 译文:1篇
    • 评论:8条