为什么我不能将UTF-8字符保存到我的数据库中?

时间:2017-06-14 22:50:33

标签: c# .net encoding utf-8 localization

我正在开展一个非常大的企业项目。它是一个C#,.NET Entity Framework站点,后面有一个Microsoft SQL服务器。

我正在测试的输入位于如下形式:

@using (Html.BeginForm("CreateAgency", "Agency", FormMethod.Post, new { enctype = "multipart/form-data", accept_charset = "utf-8" }))
{
...
<li>
<label id="lblAgency" class="AgencyEditorPanelItemsLabel">Agency Name</label>
@Html.TextBoxFor(m => m.AgencyName, new { @class="newAgencyTextInput"})
</li>
...

这可以追溯到AgencyController,在那里它被解析:

NameValueCollection nvc = HttpUtility.ParseQueryString(String.Empty);
nvc.Add("AgencyName", agency.AgencyName);
...

然后它被打包成一个字符串,用于通过API发布:

//make the post object readily convertable to a string
StringBuilder sb = new StringBuilder();
sb.Append(nvc.ToString());
//encode collection for pending transmission
var data = Encoding.UTF8.GetBytes(sb.ToString());

我所展示的代码中是否有任何内容会导致UTF-8字符变为“%u00a5%u00b7%u00a3%u00b7%u20ac%u00b7 $%u00b7%u00a2%u00b7%u20a1%u00b7%u20a2 %u00b7%u20a3“?我甚至试过在我的webconfig中添加一个全球化密钥,如下所示:

<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />

但那没有做任何事。有没有人有一些我可以尝试解决这个问题的提示或想法?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为了其他有类似问题的人的利益,事实证明服务器使用%s将其编码为URI。由于我们不需要该功能,因此我将以下内容添加到web.config文件中:

<appSettings>
<add key="aspnet:DontUsePercentUUrlEncoding" value="true" />

这会停止自动网址编码,因此如果您需要该功能,请不要忘记手动编码需要它的网址。