【发布时间】:2017-04-11 06:50:43
【问题描述】:
上面有带有 ALT+0174 符号 ® 的文件(注册/保留)
http:/ftp.com/longname_®.png_thumbnail.jpg
我尝试使用
var pathToFile = "http://ftp.com/longname_®.png_thumbnail.jpg";
Html.Encode(pathToFile);
Html.Raw(Url.Encode(pathToFile));
我得到了
http%3a%2f%2fftp.com%2longname_%c2%ae.png_thumbnail.jpg,注意%C2%AE。
但有效的网址是http%3a%2f%2fftp.com%2longname_%ae.png_thumbnail.jpg,请注意%AE。
为什么?
【问题讨论】:
-
%AE是escape函数的结果%C2%AE是encodeURI的结果 为什么你期望%AE?看来%C2%AE是一个不错的结果,因为转义方法已被弃用。 -
所以客户端不使用UTF。作为乌克兰语,它可能是 Windows-1251,这就是为什么保留了西里尔字母,而没有保留汉字。它最有可能使用您的旧 Ansi 编码。您还可以看到,每个西里尔字母只有一个
%XX,而如果使用 UTF-8,将会有更多。服务器对OPTS UTF8 ON的响应是什么? -
再次尝试在 Total Commander 中强制使用 UTF-8:Net > FTP Connect > New connection > Advanced > Encoding of file names > UTF-8
-
看起来不错。那么现在 ftp.com 为这些文件提供了什么 URL?
-
所以其他软件上传不正确。虽然您可以通过在 Windows-1251 编码中生成 URL 来解决此问题,但一旦文件包含 Windows-1251 编码中不存在的任何字符,它就会中断 - 这就是您想要的吗?