我已经在 Windows 机器上开发了我的 Java/EE 程序,并且一切都在 Windows 中完美运行,但是当我在 Linux 机器中将 WAR 安装到 Jboss 时,当我导入 csv 文件时,我遇到了 MySQL 的编码问题。 Csv 文件编码为 ISO-8859-1,我导入的文件编码为 ISO-8859-1。 MySQL 似乎没有将字符串编码为 UTF-8,数据库中使用的编码是什么。
最佳答案
如果问题发生在您读取文件时(而不是在将数据插入数据库时),我猜是 file.encoding
系统属性关闭了。如果您创建阅读器而不指定编码,它将使用 file.encoding
作为默认值。因此,如果您的 Linux 机器使用 UTF-8 作为其系统编码,那么非 ASCII-7 字符将会造成麻烦。
您可以通过将 LC_ALL
环境变量设置为某个适当的值来全局更改系统的默认编码(我认为您可以使用 en_US.ISO-8859-1
,但请查看手册),或者您可以通过在命令行上指定来在本地为 JVM 实例更改它:
java -Dfile.encoding=ISO-8859-1 -jar yourapp.jar
如果您可以更改读取 CSV 的代码,我假设您从 InputStreamReader
读取(直接或间接) - 只需为构造函数提供正确的 CharSet
/CharSetDecoder
就完成了。 (您可能还想使这些东西可配置 - 但我假设您可以自己解决这个问题。)
关于java - Linux 和 MySQL 中的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986254/