什么是正确的.NET编码格式用于解码使用PHP rawurlencode编码的字符串?

时间:2017-09-27 14:48:28

标签: php .net unicode encoding

我有一堆字符串,我告诉他们使用PHP中的rawurlencode函数编码。

这些字符串中的一些包含用于unicode代码点127之上的字符的百分比编码序列 - 例如a%A0b

认为上例中的A0意味着代表一个不间断的空间(Unicode代码点160 0xA0),但A0就是它自己的不是有效的UTF-8序列(任何具有高位设置(> 127)的字节都是多序列的一部分)。因此,.NET默认将此解码为?

我尝试了一些不同的编码。 iso-8859-1似乎很合适,但我无法确定。

此URL编码的字符串包含非英文字符,因此转换正确发生至关重要。

传递给System.Web.HttpUtility.ParseQueryString以解码已使用rawurlencode编码的字符串的正确编码是什么?

1 个答案:

答案 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))。

要告诉的唯一方法是在应用程序中输入不同的字符,看看会出现什么。您期待什么“非英语”字符,任何特定语言?