Ubuntu系统默认字符编码需与Java程序一致(推荐UTF-8),否则会导致输入/输出乱码。
locale命令,确认LANG、LC_ALL等变量值为zh_CN.UTF-8或en_US.UTF-8(若未显示UTF-8,需修改)。export LANG=zh_CN.UTF-8、export LC_ALL=zh_CN.UTF-8(仅当前会话有效)。~/.bashrc或~/.profile文件末尾,执行source ~/.bashrc使配置生效。通过JVM参数强制Java程序使用UTF-8编码,覆盖默认设置。
java -Dfile.encoding=UTF-8 -jar yourapp.jarjava -Dfile.encoding=UTF-8 YourMainClasscatalina.sh(或startup.sh)中添加JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8",确保Tomcat启动时应用该编码。Ubuntu默认缺少中文字体,需安装支持中文的字体(如文泉驿系列),并配置Java字体缓存。
sudo apt update && sudo apt install ttf-wqy-zenhei ttf-wqy-microhei ttf-simsun(选择常用中文字体)。$JAVA_HOME/jre/lib/fontconfig目录,执行以下命令:sudo mkdir fallback
sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc fallback/wqy-zenhei.ttc
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
此操作将中文字体链接到Java字体目录,并更新字体缓存,使Java能识别并使用中文字体。在文件读写、网络传输等场景中,必须显式指定编码,避免依赖系统默认编码。
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt"), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8"))) {
writer.write("中文内容");
} catch (IOException e) {
e.printStackTrace();
}
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8。若Java程序部署在Tomcat上,需修改Tomcat配置以支持UTF-8。
conf/server.xml的<Connector>标签中添加URIEncoding="UTF-8",例如:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
web.xml中添加字符编码过滤器,强制处理请求/响应的编码:<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
若通过IntelliJ IDEA、Eclipse等IDE运行Java程序,需确保IDE的编码设置与项目一致。
File → Settings → Editor → File Encodings,将Global Encoding、Project Encoding、Default encoding for properties files均设置为UTF-8。Window → Preferences → General → Workspace,将Text file encoding设置为UTF-8。以上步骤覆盖了Ubuntu下Java乱码问题的常见原因(系统编码、JVM参数、字体、代码、服务器/IDE配置),按顺序排查即可解决大部分乱码场景。若问题仍存在,需检查应用程序是否有自定义编码设置(如第三方库的编码配置)。