字符集问题

问题描述:

我有一个utf-8格式的MYSQL数据库,但数据库中的字符是ISO-8859-1(ISO-8859-1字符串存储在utf-8中)。我尝试过重新编码,但它只转换ü到ü¼)。有没有人有解决方案?字符集问题

+0

最简单的方法是重新导入具有指定的正确字符集的数据。任何方式来做到这一点? – 2011-06-14 11:04:33

+0

我不能重新进口 – niklas 2011-06-14 11:06:29

+0

这里有一个很好的答案重复:[我需要帮助修复破损的UTF8编码](http://*.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding ) – 2011-06-14 11:07:36

如果您试图在设置为UTF-8的数据库中存储ISO-8859-1字符,您只是设法破坏了您的“特殊字符” - 因为MySQL会从数据库中检索字节并尝试将它们组装为UTF-8而不是ISO-8859-1。正确读取数据的唯一方法是使用一个脚本,做一些事情,如:

ResultSet rs = ... 
byte[] b = rs.getBytes(COLUMN_NAME); 
String s = new String(b, "ISO-8859-1"); 

这将确保您获得(其中来自一个ISO-8859-1字符串从你所说的)字节,然后您可以将它们组装回ISO-8859-1字符串。 另一个问题 - 你用什么来“查看”数据库中的字符串 - 是不是你的控制台没有正确的字符集来显示这些字符,而不是错误地存储字符?

注:最后更新的评论

+1

数据库设置为UTF-8存储在数据库中的字符串是iso-8859-1 – niklas 2011-06-14 11:12:51

+1

我刚刚更新了代码 - 只是在重新组装字节时使用ISO-8859-1的问题成一个字符串。 – Liv 2011-06-14 11:16:51

我只是通过这个去后上方。我解决方案的最大部分是将数据库导出到.csv并查找/替换有问题的字符。问题中的字符可能看起来像一个空格,但直接从单元格复制它作为查找参数。

一旦做到这一点 - 和失踪,这是整个上午都什么花了我:

  • 将文件保存为CSV(MS-DOS)

优秀post在这个问题上

MS-DOS的来源idea