.NET字符编码问题

时间:2009-11-02 15:08:18

标签: c# asp.net sql encoding codepages

我在.NET网站上遇到了一些问题,拉丁语(åäö)和拉脱维亚语(āē)都需要共存。在数据库中,我使用nvarcharntext作为我的字段,如果我将文本直接输入数据库,一切正常。

问题是,当我使用执行SQL UPDATE的表单输入完全相同的文本时,拉脱维亚字符会转换为类似的拉丁字符,因此字符串“åäöāē”将保存为“åäöae”。

我尝试了不同的CodePages,但我还没有得到我想要的结果。有没有人有任何建议?

3 个答案:

答案 0 :(得分:4)

您的SQL语句是否将值作为unicode值传递给db?

e.g。基本的例子

INSERT YourTable VALUES ('Unicode Value')

应该是:

INSERT YourTable VALUES (N'Unicode Value')

显然我建议你使用参数化的SQL /存储过程并将参数定义为NVARCHAR,但是你得到了我所说的。

答案 1 :(得分:1)

分别取出每个管道,弄清楚发生了什么。

请参阅我在debugging unicode problems上的文章,并诊断问题出在哪里。您可能会遇到问题的地方:

  • 从用户那里获取数据
  • 更新数据库
  • 从数据库中获取
  • 显示您提取的数据

单独检查每个 ,从不依赖任何特定字体等。打印出所涉及的Unicode代码点(根据文章)。

哦,无论你在哪里指定它,都可以使用可编码所有内容的编码 - 我建议使用UTF-8。

答案 2 :(得分:0)

Windows窗体应用

在Windows窗体文本框中输入文本时,您需要使用unicode字体,例如Arial Unicode MS。

网页

确保使用UTF-8作为响应代码页。微软关于这个http://support.microsoft.com/kb/893663

的精彩文章

UTF-8将正确编码任何字符。请记住,数据库中的NText和NVarChar是UTF-16数据类型,因此从查询分析器查看数据可能会正确显示它。

在您的SQL中

如果您正在动态构建SQL,请确保使用N前缀,例如

INSERT INTO TABLE (Name, Number) VALUES (N'MyName', 1)