【发布时间】:2012-09-18 18:16:33
【问题描述】:
我有一个使用 VB.NET 用 ASP.NET 编写的 CMS,但在将 Unicode 字符保存到数据库时遇到问题。情况如下:
网页似乎通过 AJAX 请求(使用 jQuery)很好地发送了字符,至少根据 Firebug 似乎发送的 POST 很好我可以看到那里的字符应该是这样的(即,没有搞砸向上)。当我查看数据库而不是非英文字符时,我在小黑菱形内看到一个问号,你知道这个字符。我知道它不是数据库,因为 a)该字段设置为 NText 并且 b)我可以通过 SQL 管理器在手动查询中将相同的值直接插入到数据库中。数据库是 MS SQL 2005。
所以问题一定在两者之间,对吗?我特意将插入查询的参数声明为 NText:
Cmd.Parameters.Add("@FieldContent", SqlDbType.NText).Value = FieldContent
在 web.confing 中我将编码设置为:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
我已经用谷歌搜索了高和低,除了我已经尝试过的解决方案之外找不到任何其他解决方案。非常感谢任何帮助。
【问题讨论】:
-
忘了说 - AJAX 请求的内容类型标头为“text/html; charset=utf-8”,所以我没有理由怀疑 AJAX 没有正确发送。
-
您能否可靠地重现非拉丁文本被发送到服务器并错误存储或检索的场景?
-
当您从数据库中查询数据并将其显示在网页上时,您是否看到过数据的样子?数据/文本可能仍然没问题。有时 SSMS 很难选择正确的编码集来显示数据。
-
@Dai - 如果您理解正确,那么是的,每次我尝试通过 CMS 界面保存非拉丁字符时,它们都会在数据库中显示为该字符。就像我说的,POST 在 Firebug 中看起来很好,所以我相信它发送很好。如果您有更可靠的测试方法,请告诉我。
-
@tgolisch - 它显示在 CMS 和页面上都搞砸了。 cms 中的页面没有明确声明编码,但 Firefox 似乎将它们识别为 UTF-8,并且网站前端页面明确声明为 UTF-8。他们都没有出现应有的非拉丁字符。