【发布时间】:2013-10-14 14:21:26
【问题描述】:
问题来了:我的代码中有一些中文,我正在将其写入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驱动初始化前是否设置了属性?可能是 DB 驱动程序正在使用默认系统值进行初始化,而您在此之后设置属性?
-
不需要设置
file.encoding(不在命令行,也不在代码中)。在您的代码中的某处,您可能依赖于将默认字符集设置为UTF-8(例如,您可能在未指定字符集的情况下调用String.getBytes(),或者在未指定字符集的情况下从文本文件中读取)。在您的代码中修复该问题。 -
是的,我在我的 Main 方法的第一行设置了属性,并调用
System.getProperty方法以确保它已经更改为“UTF-8”@Vikdor -
你打赌,我没有将字符集添加到
String.getBytes(),非常感谢! (你能在下面给出你的答案吗?)@Jesper