Eclipse中Java printf()函数数值变量输出异常求助
Java printf输出数值变量显示问号的解决方案
问题现象
使用printf()输出布尔、字符、字符串类型变量正常,但int、double等数值变量输出时显示一串?,测试代码如下:
public class Main { public static void main(String[] args) { boolean myBoolean = false; char myChar ='$'; String myString = "Hello world"; int myInt= 30; double myDouble = 123.456; System.out.printf("boolean = %b\n",myBoolean ); System.out.printf("Char = %c\n",myChar ); System.out.printf("String = %s\n",myString); System.out.printf("int = %d\n",myInt); System.out.printf("double = %f\n",myDouble ); } }
控制台输出:
boolean = false
Char = $
String = Hello world
int = ??
double = ??????????
问题原因
这是JVM输出编码与控制台编码不匹配导致的,数值类型的格式化输出字符无法被当前控制台编码正确解析,从而显示为问号。
解决步骤
调整IDE编码设置
- Eclipse:依次打开
Window > Preferences > General > Workspace,将Text file encoding设为UTF-8;再进入Run/Debug > Console,把Console encoding也设为UTF-8。 - IDEA:打开
File > Settings > Editor > File Encodings,将Global Encoding、Project Encoding、Default encoding for properties files全部设置为UTF-8;然后在Run/Debug Configurations的对应程序配置中,在VM options里添加参数:-Dfile.encoding=UTF-8。
- Eclipse:依次打开
强制指定JVM输出编码
无论使用哪种IDE,直接在运行程序时添加VM参数-Dfile.encoding=UTF-8,确保JVM输出的编码和控制台编码一致。检查控制台字体
确认控制台使用的字体支持ASCII字符(比如Consolas、Microsoft YaHei等),避免使用不兼容的特殊字体。
内容的提问来源于stack exchange,提问作者behzadfam
相关产品推荐
相关产品推荐

