我有些麻烦的URL编码为UTF-8编码的文本字符串以通过HTTP传递。我在经典ASP(vbscript)中使用Server.URlEncode对“é”字符进行编码。
它产生以下字符串,
%C3%83%C2%A9
我通过HTTP与之交谈的系统是PHP,但是无法解码此字符串。使用http://www.albionresearch.com/misc/urlencode.php上的PHP编码器,出现了使用PHP URL编码方法编码的相同字符,
%E9
有谁知道我如何在ASP中成功编码UTF-8编码的字符串,以便PHP系统可以成功对其进行解码?
%C3%83%C2%A9
编码太多了:字符串写成UTF-8,读回为ISO-8859-1,然后再写成UTF-8,然后再进行十六进制编码!
%E9
编码太少:该字符串以纯ISO-8859-1的形式写出并以十六进制编码。如果您正在使用的PHP脚本期望使用ISO-8859-1,那么这很好,但是现代Web系统应该使用UTF-8,在这种情况下,您希望其显示的顺序如下:
%C3%A9
(编码正确!)
我在经典ASP中使用Server.URLEncode
不幸的是,经典ASP在处理Unicode方面存在一些严重缺陷。您可以设置@ CODEPAGE = 65001(和Response.Charset =“ UTF-8”)以生成UTF-8页面,但是您的内部字符串类型仍在系统代码页中进行编码,并且从表单提交或数据库中获取的任何数据都将被读入该编码。
因此,您可以使用URLEncode()文字chr 233来获取正确的输出,但如果从表单提交中以UTF-8编码的'é'获取数据,则最终会得到'é' UTF-8序列被误解为ISO-8859-1(实际上是cp1252,与Windows等效)。