我有一堆字符串,我告诉他们使用PHP中的rawurlencode
函数编码。
这些字符串中的一些包含用于unicode代码点127之上的字符的百分比编码序列 - 例如a%A0b
。
我认为上例中的A0
意味着代表一个不间断的空间(Unicode代码点160 0xA0),但A0
就是它自己的不是有效的UTF-8序列(任何具有高位设置(> 127)的字节都是多序列的一部分)。因此,.NET默认将此解码为?
。
我尝试了一些不同的编码。 iso-8859-1
似乎很合适,但我无法确定。
此URL编码的字符串将包含非英文字符,因此转换正确发生至关重要。
传递给System.Web.HttpUtility.ParseQueryString
以解码已使用rawurlencode
编码的字符串的正确编码是什么?
答案 0 :(得分:1)
PHP的本机字符串类型是普通的旧字节,没有附加编码信息。所以rawurlencode
不对Unicode进行任何处理,它只是将每个高字节的十六进制转义为%xx。
如果应用程序想要将这些字节视为字符的表示,则由应用程序决定使用哪种编码。如果应用程序告诉你在文档中,那将是可爱的,如果编码是UTF-8,那将是可爱的,这是唯一合理的选择。但显然不是。
iso-8859-1
似乎很合适,但我无法确定。
有许多编码将字符U + 00A0非中断空间映射到字节0xA0,包括所有ISO-8859以及基于它们的所有Windows代码页。真正的ISO-8859-1在网络上相对罕见,你更有可能遇到它的突变表兄弟Windows Western代码页1252(GetEncoding(1252)
)。
要告诉的唯一方法是在应用程序中输入不同的字符,看看会出现什么。您期待什么“非英语”字符,任何特定语言?