从未知字符编码中读取字符

时间:2011-02-17 18:28:18

标签: asp.net vb.net sql-server-2005 encoding asp.net-2.0

我有一个来自未知字符编码的旧数据库的字符串。我无法编码/过滤字符串以显示正确的文本。

数据库中的数据是什么样的:MarronnièreÃquatrepans
我们需要将字符串显示为:Marronnièreàquatrepans

具体来说,我在解析字符串时遇到问题,因此我可以显示字符à(à

这是一个使用Sql Server 2005数据库用VB编写的asp.Net 2.0站点。不确定是否重要,但数据来自具有此排序规则的列:SQL_Latin1_General_CP1_CI_AS

我已经尝试将字符串编码为代码中的各种编码,但无济于事。我还将字符串(以不同方式编码)传递给字节数组,以便为​​坏字符找到唯一的字节模式,但没有成功。

非常感谢任何想法或线索,谢谢。

1 个答案:

答案 0 :(得分:1)

听起来SQL Server数据库中的排序规则与实际使用的字符编码不匹配:(对于粗心的开发人员来说,这是一个相当常见的错误。

这就是SQL Server管理工具显示奇怪字符而不是您期望的字符串的原因。

可能是UTF-8?在UTF-8中,Ã由字节0xC3 0xA8表示,它将在Windows代码页Latin-1下解释为è。我对SQL Server排序规则一无所知,但似乎SQL_Latin1_CP1_CI_AS类似于Windows“Latin-1”。

您需要

  • 在从数据库中读取时修复编码。对于必须处理这个数据库和代码的下一个可怜的受害者来说,丑陋和混乱。
  • 或者更好地更正数据库中的数据,使其与排序规则匹配。您可能希望将排序规则更改为UTF-8或UTF-16:您还需要更改数据。