java中的字节与字符
1.在java中,⼀个字符等于多少字节?
或者更详细的问:在java中,⼀个英⽂字符等于多少字节?⼀个中⽂字符等于多少字节?
Java采⽤unicode来表⽰字符,java中的⼀个char是2个字节,⼀个中⽂或英⽂字符的unicode编码都占2个字节,但如果采⽤其他编码⽅式,⼀个字符占⽤的字节数则各不相同。
1. 在 GB 2312 编码或 GBK 编码中,⼀个英⽂字母字符存储需要1个字节,⼀个汉⼦字符存储需要2个字节。
2. 在UTF-8编码中,⼀个英⽂字母字符存储需要1个字节,⼀个汉字字符储存需要3到4个字节。
3. 在UTF-16编码中,⼀个英⽂字母字符存储需要2个字节,⼀个汉字字符储存需要3到4个字节(Unicode扩展区的⼀些汉字存储需要4个
字节)。
4. 在UTF-32编码中,世界上任何字符的存储都需要4个字节。
java代码举例:
String str = "测试test";
int byte_len = Bytes().length;
int len = str.length();
System.out.println("字节长度为:" + byte_len);
System.out.println("字符长度为:" + len);
如果编码⽅式为GBK,对于字符串“测试test”,字符长度为6,字节长度为8。
如果编码⽅式为UTF_8,对于字符串“测试test”,字符长度为6,字节长度为10。
PS:字符串的length()⽅法返回的是字符长度,⼀个汉⼦表⽰⼀个字符,⼀个字母也表⽰⼀个字符。
2.unicode和UTF_8有什么关系
1. UTF-8就是在互联⽹上使⽤最⼴的⼀种unicode的实现⽅式。unicode的其他实现⽅式还包括UTF-16和UTF-32。
2. UTF-8的最⼤特点是,它是⼀种可变的编码⽅式。
那么问题来了
说了这么多还是不明⽩,到底java中⼀个char表⽰⼏个字节?请看下⾯解释
public class Test {
public static void main(String[] args) {
String str= "测";
char x ='测';
byte[] byteStr=null;
byte[] byteChar=null;
try {
byteStr = Bytes("utf-8");
byteChar = charToByte(x);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("byteStr :"+byteStr.length);
System.out.println("byteChar:"+byteChar.length);
}
public static byte[] charToByte(char c) {
byte[] b = new byte[2];
b[0] = (byte) ((c & 0xFF00) >> 8);
b[1] = (byte) (c & 0xFF);
return b;
}
}
运⾏结果:
byteStr:3
byteChar:2
java是⽤unicode来表⽰字符,"测"这个中⽂字符的unicode就是2个字节。
如果不指定encoding则取系统默认的encoding。
3.编码
字符编码表(字符集)
ASCII 码表:
保存了数字,字母等
A - 65,a - 97,0 - 48
GB2312 码表:
保存了常⽤的汉字(6-7千个),⼀个中⽂占两个字节,且都为负数
GBK 码表:
保存了基本所有的汉字(20000多个),不管中⽂还是英⽂都为2个字节,这两个字节可为正负Unicode 码表:
统⼀码标(万国码标)
不管是中⽂还是英⽂都是两个字节
UTF-8 码表:
⼀个字节就可以存储的数据不⽤两个字节存储
这个码表更加标准化,在每⼀个字节头加⼊了编码信息
ISO-8859-1 码表:
拉丁码表
Tomcat默认编码
字符串长度和字节都是负数
在GBK中⼀个中⽂两个字节
在UTF-8中⼀个中⽂三个字节

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。