我有一个textarea,我输入一些unicode字符,在字符串到达服务器时成为问号。 在输入中我键入以下内容:
请不要“引用”我。
在服务器上,我检查了Request.Form["fieldID"]
中的Page_Load()
,我看到了:
“不要 。”。“
我检查了我的web.config文件,然后显示<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
。还有什么我应该检查以确保启用UTF-8?
答案 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让我看到了请求和响应中的真正含义。