charset的问题

时间:2011-06-14 11:02:56

标签: mysql linux character-encoding special-characters

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

2 个答案:

答案 0 :(得分:0)

如果您试图将ISO-8859-1字符存储在设置为UTF-8的数据库中,您只是设法破坏了您的“特殊字符” - 因为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字符串。 另一个问题 - 您用什么来“查看”数据库中的字符串 - 是不是您的控制台没有正确的字符集来显示这些字符而不是错误地存储字符? / p>

注意:在上次评论后更新了上述内容

答案 1 :(得分:0)

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

一旦完成 - 错过了这就是我整个上午的事情:

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

关于此问题的优秀post

MS-DOS的来源idea