繁体   English   中英

C#HttpRequest和不同的编码

[英]C# HttpRequest and different encodings

这是我的问题。 我有一个ASP.NET / C#网站,通过GET / POST接收一些数据

这是“用户填充”数据,但不是通过网页,它是与我的服务器联系的软件。

问题是,该软件正在发送以ISO-8859-1编码的数据(因此Café将作为Caf%e9发送),其余的SW / DB是Unicode

此外,数据完全被破坏,恢复已发送的内容:/

处理这个问题的最佳方法是什么?

我尝试设置Request.ContentEncoding(在阅读之前),但没有用。

这里唯一有用的是将以下代码添加到web.config:

<configuration>
  <system.web>
    <globalization requestEncoding="iso-8859-1"/>
  </system.web>
</configuration>

然后使用

Request["varName"]

不要使用HttpUtility.UrlDecodeHttpUtility.UrlEncode ,这些只能用于原始查询字符串。 请求[]已经为您解码。

感谢JamesP自己发布这个想法。

%e9只是é但UrlEncoded。 Server.UrlDecode您的请求字符串。

看着

如何:为ASP.NET网页全球化选择编码

短:

在web.config中写

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

删除aspx头中的编码条目。

如果utf-8不正确,请尝试使用utf-16

我希望这有帮助。

这个问题的原作者。

帮助我的是Georg建议设置Web.config变量,我把它

requestEncoding = “ISO-8859-1”

现在一切正常,谢谢!

如果我理解正确,您将从HTTP请求中提取此信息。 我将假设它是编码中的HTTP请求主体。

您可以使用System.Text.Encoding.GetEncoding(...)来检索ISO-8859-1的Encoding对象。 然后在该编码对象上调用GetDecoder(),并使用它来解释请求体。 理想情况下,您可以从请求中的标头值确定从Encoding.GetEncoding(...)加载的编码类型,因此支持具有不同配置的服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM