用javac编译时报错:“错误:编码GBK出现不可映射字符”与windows记事本几种编码格式
用记事本编写java程序,若含有中文,且保存的编码格式为UTF-8,用javac编译时报错:“错误:编码GBK出现不可映射字符”的处理方法:
法1、将中文改成英文
法2、用Javac -encoding UTF-8 xxx.java
使用-encoding UTF-8命令项编译文件xxx.java
法3、记事本打开java源文件,另存为选择ANSI编码 。
你可以用Hello.java文件试试,其源码如下:
public class HelloWorldwww{
public static void main(String args[]){
System.out.println("这是美丽的世界!");
}
}
先用 cd 命令切换到Hello.java文件所在的文件夹
如果保存java源文件时选择的编码是ANSI,那么可以直接使用javac编译源文件:
javac Hello.java
如果保存java源文件时选择的编码是UTF-8,那么使用javac编译源文件时必须显式用-encoding参数,告知编译器使用怎样的编码解析、编译源文件,即-encodeing给出的值必须和源文件的编码相同,不显式使用-encodeing参数,那么默认该参数的值是GBK(简体中文 Windows 操作系统中)。
javac -encoding UTF-8 Hello.java
下面,介绍一下windows记事本几种编码格式。
在windows平台下,打开内置的记事本小程序Notepad.exe.打开后,点击【文件】→【另存为】,弹出一个对话框,在最低部有一个“编码”的下拉列表,参见下图:
ANSI
ANSI 编码表示英文字符时用一个字节,表示中文用两个或四个字节。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。ANSI编码在不同的系统中代表着不同的编码:
在简体中文 Windows 操作系统中,ANSI 编码代表 GBK 编码;
在繁体中文 Windows 操作系统中,ANSI 编码代表 Big5;
UTF-8
UTF-8是unicode的实现方式之一,它规定了字符如何在计算机中存储,传输等。
UTF-16LE,其后缀是 LE 即 little-endian,小端的意思。小端就是将高位的字节放在高地址表示。
UTF-16BE,其后缀是 BE 即 big-endian,大端的意思。大端就是将高位的字节放在低地址表示。
unicode编码表中包含了世界上所有国家的所有字符和符号的编码。 例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。
带有BOM的UTF-8
BOM即byte order mark ,中文名译作“字节顺序标记”。位于文件开始的地方。用于标记高位在前,还是低位在前。BOM 有两种形式: BE: Big-Endian, 高位在前,低位在后 LE: Little-Endian, 低位在前,高位在后 其中,UTF-8 的 BOM 可有可无,但如果读到 EF BB BF,就是 UTF-8 的文件。
有的软件要求读入的文件必须带BOM。