使用Flex/Flash的Loader、URLLoader(或它们的派生类)使用URLRequest,通过http加载带中文路径的文件时,出现文件不存在错误。
例如:http://{host}/Common/Asset/新文件夹1/图片1.jpg
通过在服务器对http报文进行监控。
Case1:用Loader加载时,服务器收到的报文是:
GET /Common/Asset/%D0%C2%CE%C4%BC%FE%BC%D01/%CD%BC%C6%AC1.jpgHTTP/1.1
GET /Common/Asset/%E6%96%B0%E6%96%87%E4%BB%B6%E5%A4%B91/%E5%9B%BE%E7%89%871.jpgHTTP/1.1
Case3:用encodeURI对“/Common/Asset/新文件夹1/图片1.jpg”加密,得到:
/Common/Asset/%E6%96%B0%E6%96%87%E4%BB%B6%E5%A4%B91/%E5%9B%BE%E7%89%871.jpg
对比case1,2,3可以发现:Case1是GB2312编码的url escape,Case2、3是UTF-8编码的url escape。
这说明Flex/Flash的对于URLRequest(url)中的url有中文路径时,会采用GB2312编码进行url escape,这跟encodeURI的UTF-8编码是不一致的。
我在服务器端处理该问题
我的http服务器对请求路径先判断是UTF-8还是GB2312编码,然后再进行相应解码。这样更能灵活应对上述产生的2种编码问题。