CentOS上Java应用出现乱码,通常由字符编码不一致导致,可按以下步骤解决:
-
检查并设置系统编码
- 执行
locale命令,确认系统默认编码是否为UTF-8。 - 若非UTF-8,编辑
/etc/locale.conf,添加LANG=en_US.UTF-8(或zh_CN.UTF-8),然后执行source /etc/locale.conf或重启系统生效。
- 执行
-
配置JVM默认编码
- 启动Java应用时添加参数:
java -Dfile.encoding=UTF-8 -jar yourApp.jar。 - 或在代码中通过
System.setProperty("file.encoding", "UTF-8")设置(需在程序启动初期执行)。
- 启动Java应用时添加参数:
-
确保代码中显式指定编码
- 文件读写时明确指定UTF-8编码,例如:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), StandardCharsets.UTF_8)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.txt"), StandardCharsets.UTF-8));
- 文件读写时明确指定UTF-8编码,例如:
-
检查数据库编码
- 若应用连接数据库,确保数据库字符集为UTF-8(如MySQL执行
SHOW VARIABLES LIKE 'character_set%',确认character_set_database等为UTF-8)。
- 若应用连接数据库,确保数据库字符集为UTF-8(如MySQL执行
-
验证终端/日志编码
- 若乱码出现在终端,执行
export LANG=en_US.UTF-8临时设置终端编码,或修改终端配置为UTF-8。 - 日志框架(如Log4j/Logback)需在配置文件中指定编码,例如Logback的
。
- 若乱码出现在终端,执行
-
其他注意事项
- 确保Java源文件本身以UTF-8编码保存(可通过编辑器查看文件编码)。
- 若使用第三方库,需确认其是否支持UTF-8,必要时单独配置编码参数。
按以上步骤逐步排查,可解决大多数CentOS下Java应用的乱码问题。