3

我有一个文本区域,我在其中键入一些 unicode 字符,这些字符在字符串到达​​服务器时变成问号。在输入中,我输入了以下内容:

不要“引用”我的话。

在我签Request.Form["fieldID"]入的服务器上Page_Load(),我看到:

“不要在这方面‘引用’我的话。”

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

4

3 回答 3

0

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

您需要对字符串进行HTML 编码。

于 2012-11-28T01:13:24.933 回答
0

检查Pagewhereform和/或accept-charset的编码form

我可以复制你所看到的ISO-8859-1- 例如

<form action="foo" method="post" accept-charset="ISO-8859-1">
   ....
</form>

在 VS 观察窗口中


检查Request.Form(在访问密钥本身之前):

message=Don%ufffdt+%ufffdquote%ufffd+me+on+that.

检查Request.Form["message"]- 访问集合键,这意味着 ASP.Net 已经自动 urldecode

"Don�t �quote� me on that."

似乎某些东西正在覆盖该特定页面上的 web.config 设置(?)

嗯...

于 2012-11-28T02:46:28.177 回答
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让我看到了请求和响应中到底是什么。

于 2013-01-15T22:10:56.390 回答