我们如何解码从其他域发布的字符串?

时间:2011-11-21 12:45:39

标签: c# asp.net-mvc-3 .net-4.0 character-encoding

我创建了<form>,指向http://localhost:17099/Form/Subscribe并在我的网站上托管...

每当我尝试post北欧角色时,我都会这样:

enter image description here

这是我发布Bruno Alexandre å ø æ作为Name

  

我需要做什么才能获得正确的编码字符?

  • 我尝试使用GetBytes()来弄清楚我是否可以从一种编码转换为另一种编码
  • 我尝试过使用this trick
  • 我尝试将accept-charset="ISO-8859-1"附加到表单

但没什么可行的......

如果我从当前请求中检查Accept-Charset,我会得到:

ISO-8859-1,utf-8;q=0.7,*;q=0.3

如果我和System.Text.Encoding一起玩,我明白了:

var name = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(model.Name);
string n = System.Text.Encoding.UTF8.GetString( name );

n将打印为"Bruno Alexandre ? ? ?"

向下钻取并将字符串转换为字节,如果我发送å æ ø,这就是我得到的:

var b = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(model.Name);

b[0] = 63
b[1] = 32
b[2] = 63
b[3] = 32
b[4] = 63

女巫导致"? ? ?"

1 个答案:

答案 0 :(得分:1)

表示可能没有使用正确的内容类型发布表单;它应该是:

application/x-www-form-urlencoded; charset=UTF-8

您可以将此简单地附加到<form>

accept-charset="UTF-8" 
enctype="application/x-www-form-urlencoded; charset=UTF-8;"

所以最终会像:

<form method="post" 
      action="http://domain.com/subscribe" 
      accept-charset="UTF-8" 
      enctype="application/x-www-form-urlencoded; charset=UTF-8;">