问题出在这里:我的代码中有一些中文,我正在写入sqlite。从命令行和代码设置系统属性有什么区别?
当我在eclipse中运行我的程序并从sqlite读取字符串时,它正常工作。但是当我将这个项目打包成jar并在命令行中运行它时。从sqlite中读出的中文字符串是不可读的。
经过一番试验后,我知道问题在于系统属性file.encoding
。当我使用命令:java -Dfile.encoding=UTF-8 -jar TK.jar
运行jar时,它对中文单词可以正常工作,但是如果我将代码中的系统属性设置为:System.setProperty("file.encoding", "UTF-8");
,则它不起作用。
那么,从命令行和代码设置系统属性有什么区别?谁能告诉我如何在代码中设置file.encoding
系统属性?
非常感谢!
要总结:
请记住,为了在不同的环境中运行程序时,以避免中国人或日本人不可读的输出使用String.getBytes()
以及new String()
时添加字符集。
是否在DB驱动程序初始化之前设置属性?数据库驱动程序可能会使用默认的系统值进行初始化,并且您在设置属性之后? – Vikdor
不需要设置'file.encoding'(不在命令行或代码中)。在代码中的某处,您可能依赖于默认字符集被设置为“UTF-8”(例如,您可能正在调用'String.getBytes()'而不指定字符集,或者从文本文件中读取而未指定字符集)。修复代码中的问题。 – Jesper
是的,我在我的主要方法的第一行设置属性,我调用'System.getProperty'方法来确保它已经更改为“UTF-8”@Vikdor – Judking