问题:Java中一个char可以表示一个汉字吗?

 1 import java.io.UnsupportedEncodingException;
 2 import java.nio.ByteBuffer;
 3 import java.nio.CharBuffer;
 4 import java.nio.charset.Charset;
 5
 6 /**
 7  * Java中一个char可以表示一个汉字吗?
 8  * 汉字是否可以只占两个字节?
 9  */
10 public class BytesOfChart {
11
12     public static void main(String[] args) throws UnsupportedEncodingException {
13         char c = 'a';
14         char c1 = '中';
15         String str = "a";
16         String str1 = "中";
17         String str2 = "A";
18
19         System.out.println("编码为UTF8:");
20         System.out.println("char值为英文字符所占字节长度:" + getBytesUTF8(c).length);
21         System.out.println("char值为中文字符所占字节长度:" + getBytesUTF8(c1).length);
22
23         System.out.println("编码为GBK:");
24         System.out.println("char值为英文字符所占字节长度:" + getBytesGBK(c).length);
25         System.out.println("char值为中文字符所占字节长度:" + getBytesGBK(c1).length);
26
27         System.out.println("编码为UTF8:");
28         System.out.println("String值为英文字符所占字节长度:" + str.getBytes("utf-8").length);
29         System.out.println("String值为中文字符所占字节长度:" + str1.getBytes("utf-8").length);
30
31         System.out.println("编码为GBK:");
32         System.out.println("String值为英文字符所占字节长度:" + str.getBytes("GBK").length);
33         System.out.println("String值为中文字符所占字节长度:" + str1.getBytes("GBK").length);
34
35         //这块str2好像不是全角的,全角占两个字节
36         System.out.println("String值为英文字母(全角)所占字节长度:" + str2.getBytes("GBK").length);
37     }
38
39     public static byte[] getBytesUTF8(char c) {
40         Charset charset = Charset.forName("utf-8");
41         CharBuffer allocate = CharBuffer.allocate(1);
42         allocate.put(c);
43         allocate.flip();
44         ByteBuffer encode = charset.encode(allocate);
45         return encode.array();
46     }
47
48     public static byte[] getBytesGBK(char c) {
49         Charset charset = Charset.forName("GBK");
50         CharBuffer allocate = CharBuffer.allocate(1);
51         allocate.put(c);
52         allocate.flip();
53         ByteBuffer encode = charset.encode(allocate);
54         return encode.array();
55     }
56
57 }

 控制台结果:

编码为UTF8:
char值为英文字符所占字节长度:1
char值为中文字符所占字节长度:3
编码为GBK:
char值为英文字符所占字节长度:2
char值为中文字符所占字节长度:2
编码为UTF8:
String值为英文字符所占字节长度:1
String值为中文字符所占字节长度:3
编码为GBK:
String值为英文字符所占字节长度:1
String值为中文字符所占字节长度:2
String值为英文字母(全角)所占字节长度:1
01-09 15:48
查看更多