解决 java “错误:编码GBK 的不可映射字符”
解决 java “错误:编码GBK 的不可映射字符”
当java程序在idea上可以执行,但在cmd时报错:编码GBK 的不可映射字符时,通常都是因为GB2312编码的问题。
比如这个程序。在idea上运行时不会有问题的。用cmd运行时问题就出在第10行的
int xd =0//向导数
上,其中的“向导数”出了问题。
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int line = in.nextInt();
while (line-- > 0) {
int n = in.nextInt();//人数
int xd = 0;//向导数
int qx = n / 2;//抢险
int yl =(n-qx) *2 / 3;//医疗
int tx = n-qx - yl;//通讯
if (qx % 10 != 0) {
xd = xd + qx / 10 + 1;
} else {
xd = xd + qx / 10;
}
if (yl % 10 != 0) {
xd = xd + yl / 10 + 1;
} else {
xd = xd + yl / 10;
}
if (tx % 10 != 0) {
xd = xd + tx / 10 + 1;
} else {
xd = xd + tx / 10;
}
System.out.println(xd);
}
}
解决方法
检查
查本机区域语言设置中文没有问题
需要把当前系统区域设置成中文(简体,中国)
在cmd中输入
javac -encoding UTF-8 HelloWorlewww.java
其中
HelloWorlewww.java
就是你需要运行的java程序记事本打开java源文件,另存为选择ANSI编码
接下来重新用javac等操作编译,编译通过
说明:ANSI:美国国家标准协会,系统预设的标准文字储存格式。简体中文编码GB2312,实际上它是ANSI的一个代码页936
UTF-8:通用字集转换格式,这是为传输而设计的编码,2进制,以8位为单元对Unicode进行编码,如果使用只能在同类位元组内支持8个位元的重要资料一类的旧式传输媒体,可选择UTF-8格式。
在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的),用专门的Unicode处理类可以对UTF编码进行处理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lcdzzz的博客!