在Windows下用德语变音符号时,需给Java编译器加-encoding UTF-8吗?
Windows下含特殊字符的Java源码编译需指定UTF-8编码吗?
是的,在Windows系统下编译包含德语变音符号(如ß、ü)这类特殊字符的Java源码时,必须显式添加-encoding UTF-8参数,否则会出现字符乱码问题。
为什么默认不是UTF-8?
Java编译器(javac)的默认编码并非固定为UTF-8,而是跟随当前操作系统的默认字符集。在Windows系统中,默认字符集通常是GBK或CP1252这类本地编码,而非UTF-8。如果你的源码是以UTF-8编码保存的,javac用系统默认编码去读取时,就会把UTF-8格式的字节错误解析成本地编码,导致特殊字符显示乱码。
结合示例验证
你的测试代码:
class Main { public static void main(String[] args) { System.out.println("Viel Spaß beim üben!"); } }
在Windows CMD中的测试结果完全印证了这个问题:
- 未指定编码时,javac用系统默认编码读取UTF-8源码,编译后输出乱码:
C:\temp>javac Main.java && java Main Viel Spa� beim üben!
- 显式指定
-encoding UTF-8后,javac以UTF-8编码正确读取源码,输出正常:
C:\temp>javac -encoding UTF-8 Main.java && java Main Viel Spaß beim üben!
额外建议
为了保证代码的跨平台一致性,建议始终用UTF-8编码保存Java源码,并在编译时显式指定-encoding UTF-8参数,避免因操作系统默认编码差异导致的乱码问题。

内容的提问来源于stack exchange,提问作者Tobias Otto
相关产品推荐
相关产品推荐

