我可以恢复错误存储在varchar字段中的国际字符吗?

时间:2008-10-28 00:43:53

标签: sql-server unicode utf-8 sql-server-2000

我的客户端有一个旧的MS SQL 2000数据库,它使用varchar(50)字段来存储名称。他试图使用这个数据库来捕获一些数据(通过网络表单)。一些表格填充来自其他国家,当其中一些人输入他们的名字时,varchar字段变得坚果。是否有可能以某种方式恢复数据?也许根据它在ASCII / varchar和该人所在的国家/地区解析的内容来猜测角色应该是什么?一些数据:

姓名/国家/名字或姓氏?
JiÅ™Ã/ CZE / F
Torbjörn/ FIN / F
Huszár/ HUN / L
Jürgen/ DEU / F
Müller/ CHE / L
Bumbálková/ CZE / L
Doležal/ CZE / L
Loïc/ DEU / L

顺便说一下,Web表单指定了这个内容类型:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

4 个答案:

答案 0 :(得分:6)

从第5个例子开始工作。

Ã是ascii#195(C3)。 ¼是ascii#188(BC)。

我猜Müller应该是Müller。

如果这是UTF-8,基于 http://en.wikipedia.org/wiki/UTF-8#Description

我们有 C3 BC = 1100 0011 1011 1100

应用UTF-8映射:

(110)00011(10)11 1100

<00> 0000 0000 1111 1100

00FC是Unicodeü

U + 00FC(见http://en.wikipedia.org/wiki/Latin_characters_in_Unicode

在我看来,您可以通过编程方式完成此任务。

现在解决第一个例子:

Jiå™ã实际上是JiÅ™Ã(最后一个角色未显示)。

忽略Ji,这是正确的,

C5 99 c3 AD

(110)0 0101(10)01 1001(110)0 0011(10)10 1101

0159 00ED

RI

所以名字是:Jiří。维基百科说特殊的r是捷克语,我也是。此外,如果我googleJiří(http://www.google.com/search?q=Ji%C5%99%C3%AD&ie=utf-8&oe=utf-8)我得到了很多热门歌曲。我们在这里获胜。

第二个例子,Torbjörn,很好地映射到Torbjörn,听起来令人信服。

恕我直言,人们不需要对这些人进行检查,他们似乎只是工作。

答案 1 :(得分:1)

俄罗斯邮局做到了。有没有人在它消失之前保存图像?

http://forums.thedailywtf.com/forums/p/7156/133456.aspx

答案 2 :(得分:0)

你基本上需要通过libiconv戳它,将它转换为UTF8。

相应字符集的完整列表将取决于您的应用程序,但您可以根据国家/地区代码进行一些猜测。从this page on WikiPedia开始。

警告:您需要人员验证每次转换。

答案 3 :(得分:0)

进一步理查德的评论:如果包含表格的网页指定了一个字符集(例如iso-8859-1 == unicode)&amp;编码(例如utf-8)然后符合标准的浏览器应使用该字符集和编码提交表单数据。如果您的网页指定了unicode,那么您不必处理数据中随机的Microsoft代码页 - 它应该都是unicode。