Ubuntu14与16终端输出差异:Java应用德语字符显示异常求助
解决Ubuntu 14.04终端中Java应用德语字符显示异常问题
嘿,这个问题我之前在老版本Ubuntu上也碰到过!核心原因就是Ubuntu 14.04和16.04在字符编码、终端默认设置以及Java运行环境的字符集处理上有差异,尤其是对德语这类带变音符号的Unicode字符支持。下面给你一步步排查解决的方法:
1. 先确认终端的字符集配置
Ubuntu 16.04默认已经把终端字符集设为UTF-8了,但14.04不一定。你先打开终端,跑这两个命令看看当前设置:
echo $LANG echo $LC_ALL
如果输出不是en_US.UTF-8或者de_DE.UTF-8这类带UTF-8的,就得改区域设置:
- 执行
sudo dpkg-reconfigure locales,在弹出的界面里勾选en_US.UTF-8和de_DE.UTF-8,选其中一个作为默认区域 - 改完重启终端,再跑上面的命令确认生效
2. 强制Java用UTF-8编码运行
Java的默认字符编码有时候会跟着系统走,但Ubuntu 14.04的Java环境可能默认不是UTF-8。启动应用的时候加个参数就行:
java -Dfile.encoding=UTF-8 YourMainClass
要是不想每次启动都加参数,也可以在代码里显式指定输出流的编码(不过还是启动参数的方式更通用):
System.setOut(new PrintStream(System.out, true, "UTF-8"));
3. 你的代码逻辑没问题,别担心
你用的replaceAll里的\p{L}是Unicode属性类,本身就支持所有Unicode字母,包括德语的Ü、ä这些变音字符,所以字符串处理环节不会搞乱编码,问题肯定出在输出到终端时的编码不匹配。
4. 检查终端模拟器的字符编码设置
有些终端模拟器(比如gnome-terminal)得单独设置字符编码:
- 点终端的
编辑->配置文件首选项->字符编码 - 确保选的是
UTF-8,别选ISO-8859-1这类旧编码
最后测试一下
改完所有设置后,重新跑你的代码:
String test = "Für test with and without Ü".replaceAll("[^\\p{L}\\p{Nd}]+", ","); System.out.println(test);
正常的话终端应该输出Für,test,with,and,without,Ü,德语字符就能正常显示啦!
内容的提问来源于stack exchange,提问作者Fran Roa Prieto
相关产品推荐
相关产品推荐

