【问题标题】:Java + Mysql from ISO-8859-1 to UTF-8Java + Mysql 从 ISO-8859-1 到 UTF-8
【发布时间】:2011-12-28 12:03:28
【问题描述】:

我有一个编码为 Windows Baltic (windows-1257) 的数据库。我使用编码 UTF-8 立陶宛语(使用 sql 语言)将数据复制到其他数据库。复制数据后,我仍然没有得到 UTF-8 值 - “Nerûdijantis plienas”,我需要“Nerūdijantis plienas”。我做了一个小的 Java 应用程序,女巫应该从 UTF-8 db 中获取数据,并从拉丁语 db 和System.out.println(..) 复制数据。但是现在由于复制后数据仍然错误,我打印出错误的编码。我应该怎么办?我应该使用某种编码语句复制数据还是应该在打印输出时使用 Java 更改编码?

编辑:我需要 PHP 中的 iconv 之类的东西,当我使用它来转换数据时它可以工作。

【问题讨论】:

  • 也许dba.stackexchange.com/questions 是解决类似问题的更好地方
  • 你看,我并不是想改变数据的编码。如果可能的话,我只想在 java 中将字符串从 ISO-8859-1 转换为 UTF-8 编码并打印出来。
  • 我仍然认为为什么要从/向 JDBC 转换/输出,让 Sql Engine 返回正确的字符,顺便说一句,您可以通过要求转移到 dba.stackexchange.com/questions 论坛来标记您自己的问题,

标签: java mysql encoding utf-8


【解决方案1】:

也许可以帮助你使用MySql Collations

【讨论】:

    【解决方案2】:

    要将 ISO-8859-1 转换为 UTF-8,我们可以使用以下代码

    //将ISO-8859-1转换为UTF-8

    byte[] utf8 = new String(dataInString, "ISO-8859-1").getBytes("UTF-8");
    

    或查看 java.nio.Charset

    Converting UTF-8 to ISO-8859-1 in Java - how to keep it as single byte

    【讨论】:

      【解决方案3】:

      当然,在数据库中的文本应该是 UTF-8。您可以只对一个相关表执行 mysqldump 以检查哪里出错了。

      JEdit (http://jedit.org) 等优秀的程序员编辑器可以切换编码,这可能会有所帮助。

      Web 服务器需要执行 response.setContentText("text/html; charset=UTF-8")。 正常的应用程序应该没有问题,因为Java内部使用Unicode, 操作系统编码是立陶宛语:System.getProperty("file.encoding")

      对于 Java MySQL 驱动程序,您还需要将通信设置为 UTF-8: Character encoding issue with linux and mysql

      System.out.println 以默认系统编码打印,这可能会产生误导。 最好是字节的十六进制转储,因此您可以实际检查。

      【讨论】:

      • 这不是网络服务。至于通信,它已设置并且不起作用。如果我理解 JEdit,您建议转储我的数据库并将 dump.sql 文件编码切换为 UTF-8?如果是这样,它没有帮助。如果我切换,角色将保持原样。
      【解决方案4】:

      我根据需要标记了这个帖子以转移到不同的论坛,但由于什么都没做,我让它工作了here

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        • 2012-11-08
        • 2018-07-06
        • 2020-10-21
        • 2011-09-26
        相关资源
        最近更新 更多