一、问题描述
环境Windows 10,jdk 1.8。 当我用记事本创建了一个java源文件,保存文件的编码选择了UTF-8,然后用javac工具编译时,出现错误:编码GBK的不可映射字符.
二、问题原因
javac在编译的时候,如果没有用参数-encoding <编码>指定源文件使用的字符编码,则javac会使用操作系统默认编码格式,而我的操作系统默认是GBK,所以javac在编译源程序时使用了GBK编码。而源文件使用了UTF-8编码,使用GBK编码去解码UTF-8编码的字符,对于英文字母及字符两者都兼容,没有问题;但是对于中文两者是不兼容的UTF-8使用三个字节、GBK使用两个字节存储中文字符,因此遇到中文字符时,会出现问题
三、问题解决
解决:编译时指定参数选项 -encoding
栗子: javac -encoding UTF-8 HelloWorld.java