java学习: java编译报 编码 GBK 的不可映射字符 (0x80)与ANSI系统编码
以下是java源码:
public class test{ public static void main(String[] args){ System.out.println("test"); byte a=1; //这里结束需要分号; 以下类推 System.out.println(a); short b = 6; System.out.println(b); int c = 2; System.out.println(c); long d = 3l; //赋值后面需要l System.out.println(d); double e = 1.23; System.out.println(e); float f = 1.245f; //赋值后面需要f System.out.println(f); char g = 'n'; System.out.println(g); boolean h = false; System.out.print(h); } }
编译的时候出错,如下:

我百度了一下找到的解决方案是:
方法1:利用javac -encoding UTF-8命令进行编译,编译时执行的命令为:javac -encoding UTF-8 test.java。执行后,java源程序就被成功编译为.class文件,并且能够通过java.exe命令执行。
方法2:将test.java另存为,变设置编码格式为ANSI,如下图:

然后,再来分析原因,涉及以下几个概念:
1、java 默认是利用Unicode字符集,具体编码方式用的就是UTF-8;
2、新建.txt的文件修改后缀为.java,默认编码方式为UTF-8;
3、操作系统默认用的是GBK编码方式;
从以上3点可以看出问题,操作系统默认编码是GBK,而java是UTF-8,这里属于编码冲突。把编码方式改成一致即可。再回到以上2种解决方法:
方法一:通过命令强制系统按照UTF-8进行编码完成.java到.class的编译过程。
方法二:将文件修改成ANSI编码,让JAVA按照ANSI编码(ANSI也就是GBK)。
以上是我自己的体会,如果理解不对欢迎指正。
———————————————————————————————————————————————————————————————————————
补充知识点:
2、不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode编码之间最大也最明显的区别。
3、utf8是对unicode字符集进行编码的一种编码方式。

浙公网安备 33010602011771号