问题是您(可能)正在使用两种不同的编码:
Default
用于生成字节数组和
UTF8
用于重建字符串。很可能在你的电脑上
违约
不同于
UTF8
,这把事情搞砸了。
使用时必须小心
Encoding.Default
. 下面是它的工作原理(直接引用自
MSDN
):
不同的计算机可以使用不同的编码作为默认编码,并且
默认编码甚至可以在一台计算机上更改。因此
数据从一台计算机传输到另一台计算机,甚至在
同一台计算机上的不同时间可能翻译错误。
此外,默认属性返回的编码使用
将不支持的字符映射到字符的最佳回退
代码页支持。出于这两个原因,使用默认值
通常不建议使用编码。确保编码的字节
如果正确解码,则应使用Unicode编码,例如
UTF8Encoding或UnicodeEncoding,带有前导码。另一种选择是
使用更高级别的协议以确保使用相同的格式
编码和解码。
这个
UTF8
在这种情况下,编码应该是您想要的,但您必须连贯地应用它:
Byte[] bytes = Encoding.UTF8.GetBytes(Request.QueryString["foo"]);
String value = Encoding.UTF8.GetString(bytes);
看看
this demo
,对我来说很好。