在 Ubuntu 上运行 Ja va 程序时遇到乱码,通常是因为编码设置不一致导致的。这种情况其实挺常见,尤其是从 Windows 切换到 Linux 的开发环境中。别担心,下面几个方法基本能覆盖大多数场景,逐个试一遍,大概率能解决问题。

设置 JA VA_TOOL_OPTIONS 环境变量
这恐怕是最快捷的方法——直接告诉 JVM 默认使用 UTF-8 编码。打开终端,执行:
export JA VA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"这一条命令当场生效,但只对当前终端会话有效。如果希望每次打开终端都能自动加载,把它追加到
~/.bashrc或~/.profile文件里就行了。属于一劳永逸的配置方式。修改 Ja va 应用程序的编码设置
如果你的应用本身支持编码配置(比如 Spring 框架的 Web 项目),那就在配置文件里明确指定编码。以 Spring MVC 为例,在
web.xml中添加一个字符编码过滤器,强制所有请求和响应使用 UTF-8:CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter /* 对于其他类型的 Ja va 应用,往往也可以通过启动参数
-Dfile.encoding=UTF-8或在代码里显式指定Charset.forName("UTF-8")来绕开编码陷阱。更新系统区域设置
有时候问题根子在系统层——Ubuntu 的 locale 不是 UTF-8,Ja va 就会跟着乱走。先查一下当前状态:
locale看看
LANG那一行是不是含.UTF-8。如果不是,编辑/etc/locale.gen文件,找到你需要的语言编码(例如en_US.UTF-8 UTF-8),取消注释,然后执行:sudo locale-gen sudo update-locale LANG=en_US.UTF-8最后重启系统,区域设置就能彻底切到 UTF-8 了。这一步做完,不仅仅是 Ja va,整个系统的中文或特殊字符显示都会更正常。
检查 Ja va 版本
旧版本的 JDK/JRE 确实存在一些编码相关的 bug,尤其是一些较老的 OpenJDK 实现。如果上面几步都试了还是乱码,不妨考虑升级到最新版本。可以到 Oracle 官方下载页 获取最新的 JDK,或者直接用包管理器安装较新的 OpenJDK。升级后通常能顺带解决一批非预期的编码问题。
这四个方法基本上覆盖了 Ubuntu 上 Ja va 乱码的常见成因——从 JVM 参数、应用层配置、系统 locale 到 JDK 版本。按顺序排查,多数情况在第一步或第三步就能收工。如果仍然遇到乱码,那可能需要具体看你的数据来源(比如文件本身编码、数据库编码)是否统一,不过那就是另一个话题了。