javac对unicode编码的支持程度测试
试验结论:
1. javac支持源文件为unicode编码,但是要求文件开头不能带有BOM(Byte Order Marker),否则编译就会失败
2. 对于系统默认编码不需要添加 -encoding选项,对于Unicode编码需要添加-encoding选项, 具体如下:
utf8 : -encoding utf8
utf16le : -encoding utf-16le
utf16be : -encoding utf-16be
试验所使用工具:
1. notepad++
notepad++转换编码默认都带有BOM,对于unicode编码,它只能识别带有BOM的unicode文件
2. uconv
它能够将一个文件转换为另一种编码,但要求文件不得带有BOM
简单用法:uconv -f fromEncoding -t toEncoding -o outputfile inputfile
测试代码如下:
1. 将文件编码改为 utf8 without BOM
1) 不加 encoding选项
javac -d . Test.java
java -classpath .;%CLASSPATH% pkg.Test
打印如下:
hello 涓栫晫
很显然已经乱码了。
2) 加上encoding选项
这时候编译命令改成这个样子:javac -d . -encoding utf8 Test.java
运行后结果如下:
hello 世界
2. 将文件编码改为 utf8(带BOM)
编译,结果如下:
Test.java:1: illegal character: \65279
锘縫ackage pkg;
^
1 error
3. 将文件编码改为 UTF16LE (带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译失败,如下:
Test.java:1: illegal character: \65279
4. 将文件编码改为 UTF16LE (不带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译通过
运行结果如下:
hello 世界
5. 将文件编码改为 UTF16BE (带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译失败,如下:
Test.java:1: illegal character: \65279
6. 将文件编码改为 UTF16BE (不带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译通过
运行结果如下:
hello 世界
1. javac支持源文件为unicode编码,但是要求文件开头不能带有BOM(Byte Order Marker),否则编译就会失败
2. 对于系统默认编码不需要添加 -encoding选项,对于Unicode编码需要添加-encoding选项, 具体如下:
utf8 : -encoding utf8
utf16le : -encoding utf-16le
utf16be : -encoding utf-16be
试验所使用工具:
1. notepad++
notepad++转换编码默认都带有BOM,对于unicode编码,它只能识别带有BOM的unicode文件
2. uconv
它能够将一个文件转换为另一种编码,但要求文件不得带有BOM
简单用法:uconv -f fromEncoding -t toEncoding -o outputfile inputfile
测试代码如下:
// file name : Test.java
1 package pkg;
2
3 // 注释
4 public class Test {
5 final static int value = 1;
6
7 /**
8 * @param args
9 */
10 public static void main(String[] args) {
11 // TODO Auto-generated method stub
12 System.out.println("hello 世界");
13 }
14
2
3 // 注释
4 public class Test {
5 final static int value = 1;
6
7 /**
8 * @param args
9 */
10 public static void main(String[] args) {
11 // TODO Auto-generated method stub
12 System.out.println("hello 世界");
13 }
14
15 }
默认为GBK编码,程序执行正常
1. 将文件编码改为 utf8 without BOM
1) 不加 encoding选项
javac -d . Test.java
java -classpath .;%CLASSPATH% pkg.Test
打印如下:
hello 涓栫晫
很显然已经乱码了。
2) 加上encoding选项
这时候编译命令改成这个样子:javac -d . -encoding utf8 Test.java
运行后结果如下:
hello 世界
2. 将文件编码改为 utf8(带BOM)
编译,结果如下:
Test.java:1: illegal character: \65279
锘縫ackage pkg;
^
1 error
3. 将文件编码改为 UTF16LE (带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译失败,如下:
Test.java:1: illegal character: \65279
4. 将文件编码改为 UTF16LE (不带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译通过
运行结果如下:
hello 世界
5. 将文件编码改为 UTF16BE (带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译失败,如下:
Test.java:1: illegal character: \65279
6. 将文件编码改为 UTF16BE (不带BOM)
编译:javac -d . -encoding utf-16le Test.java
编译通过
运行结果如下:
hello 世界