由于Request.Form中的字符编码而导致的字符串中的问号

时间:2012-11-28 01:11:30

标签: c# asp.net

我有一个textarea,我输入一些unicode字符,在字符串到达​​服务器时成为问号。 在输入中我键入以下内容:

  

请不要“引用”我。

在服务器上,我检查了Request.Form["fieldID"]中的Page_Load(),我看到了:

  

“不要 。”。“

我检查了我的web.config文件,然后显示<globalization requestEncoding="utf-8" responseEncoding="utf-8" />。还有什么我应该检查以确保启用UTF-8?

3 个答案:

答案 0 :(得分:0)

这样的问号通常会在UTF-8空值传递时出现。

你需要HTML encode你的字符串。

答案 1 :(得分:0)

检查Page所在的form和/或accept-charset的{​​{1}}的编码。

我可以使用form复制您所看到的内容 - 例如

ISO-8859-1

在VS观看窗口中


检查<form action="foo" method="post" accept-charset="ISO-8859-1"> .... </form> (在访问密钥本身之前):

Request.Form

检查message=Don%ufffdt+%ufffdquote%ufffd+me+on+that. - 访问收集密钥,这意味着ASP.Net已经自动urldecoded

Request.Form["message"]

似乎某些内容覆盖了该特定页面上的web.config设置(?)

... H个

答案 2 :(得分:0)

我再一次解决自己的问题。这很简单。简短的回答是在将任何回复发送回客户端之前添加以下内容:

Response.ContentType = "text/html; charset=utf-8";

很长的答案是,称为缓存模式的“功能”通过编写UTF-8编码文件来绕过所有其他响应数据,该文件实际上只是缓存的响应。在写入文件之前添加该行解决了我的问题。

if (cacheModeEnabled) {
    Response.ContentType = "text/html; charset=utf-8"; // WriteFile doesn't know the file encoding
    Response.WriteFile(Server.MapPath("CacheForm.aspx"), true);
    Response.End();
} else {
  // perform normal response here
}

感谢所有的答案和评论。他们肯定帮我解决了这个问题。最值得注意的是,Fiddler2让我看到了请求和响应中的真正含义。