javac和java 命令是我们最熟悉的,javac有个参数-encoding ?,用于.java文件以何种编码方式编译成.class文件;java 有个参数-D'file.encoding=?' ,用于.class文件以何种编码方式运行;还有我们的.java文件自身也有编码方式。默认情况下 javac和java 都是GBK
UTF8.java 文件编码方式为UTF-8:
1
2
3
4
5
6
7
|
import java.nio.charset.Charset;
public class UTF8{
public static void main(String[] args) {
System.out.println( "file.encoding=" + System.getProperties().getProperty( "file.encoding" ));
System.out.println( "默认是:" +Charset.defaultCharset().name());
}
}
|
GBK.java 文件编码方式为GBK:
1
2
3
4
5
6
7
|
import java.nio.charset.Charset;
public class GBK{
public static void main(String[] args) {
System.out.println( "file.encoding=" + System.getProperties().getProperty( "file.encoding" ));
System.out.println( "默认是:" +Charset.defaultCharset().name());
}
}
|
注:System.getProperties().getProperty("file.encoding")和Charset.defaultCharset().name()都是返回java命令的编码方式。
列1:
文件编码和javac命令编码都是GBK,程序运行没问题。
列2:
文件编码和javac命令编码都是UTF-8 ,程序运行没问题。
列3:
文件编码UTF-8和javac命令编码GBK,中文乱码。
列4
文件编码GBK和javac命令编码UTF-8,编译不通过。
通过上面4个列子可以看出:文件编码和javac命令编码一定要一样,java命令编码方式随意。但是当程序读取文件、网络请求数据等情况下,会存在将输入流转成子符串的情况,这时就可能用到Charset.defaultCharset(),Charset.defaultCharset()获取的是java命令编码方式。虽然java命令编码方式随意,但是最好和其它两种编码一样,目的是为了方便记忆。
如:同一个.class 在不同java命令编码方式下,会出现不同的结果。
Test.java文件编码方式GBK
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.charset.Charset;
public class Test
{
public static void main(String[] args) throws Exception {
System.out.println( "file.encoding=" + System.getProperties().getProperty( "file.encoding" ));
System.out.println( "默认是:" + Charset.defaultCharset().name());
FileReader fileReader = new FileReader( "C:/UTF8.java" ); //UTF8.java 编码方式UTF-8
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuilder stringBuilder = new StringBuilder();
String temp = null ;
while ((temp = bufferedReader.readLine()) != null ) {
stringBuilder.append(temp);
}
System.out.println(stringBuilder.toString());
bufferedReader.close();
fileReader.close();
}
}
|
idea Maven项目:
文件编码设置:
file->setting
javac命令编码设置:
pom.xml
更多学习资料可关注:annalin1203
java命令编码设置: