编码表:
ASCII(美国标准信息交换码)
ISO8859-1(拉丁码表 欧洲码表)
GB2312(中文编码表)
GBK(升级的中文编码表)
Unicode(国际标准码)
UTF-8 Unicode transform format with at least 8 bytes.
"你好"用gbk码表占用4个字节,如果用utf-8解码显示??
"你好"用utf-8占用6个字节,如果用gbk解码显示"浣犲y"
编码:字符串变成字节数组
String-->byte[]
解码:字节数组变成字符串
byte[]-->String
TomCat服务器编码解码问题:
字符编码之联通
单个字节:0开头
两个字节:第一个字节:110开头 第二个字节:10开头
三个字节:第一个字节:1110开头,第二个字节:10开头,第三个字节:10开头
"你好"的gbk编码的对应二进制数字:
11000001
10101010
11001101
10101000
它正好符合utf-8的编码格式,记事本直接用utf-8来解码,就会出现解码错误。
ASCII(美国标准信息交换码)
ISO8859-1(拉丁码表 欧洲码表)
GB2312(中文编码表)
GBK(升级的中文编码表)
Unicode(国际标准码)
UTF-8 Unicode transform format with at least 8 bytes.
"你好"用gbk码表占用4个字节,如果用utf-8解码显示??
"你好"用utf-8占用6个字节,如果用gbk解码显示"浣犲y"
编码:字符串变成字节数组
String-->byte[]
解码:字节数组变成字符串
byte[]-->String
TomCat服务器编码解码问题:
import java.util.*;
class EncodeStreamDemo
{
public static void main(String[] args)throws Exception
{
String s1 = "你好";
byte[] buf = s1.getBytes("gbk");//编码
System.out.println(Arrays.toString(buf));
String s2 = new String(buf,"iso8859-1");//服务器默认编码表解码时出现错误
byte[] b = s2.getBytes("iso8859-1");//重新编码
String s3 = new String(b,"gbk");//再用对应编码表解码
System.out.println(s3);
}
}
字符编码之联通
import java.util.*;
class EncodeStreamDemo
{
public static void main(String[] args)throws Exception
{
String s1 = "联通";
byte[] buf = s1.getBytes("gbk");//编码
for(byte b : buf)
{
System.out.println(Integer.toBinaryString(b&255));
}
}
}
utf-8的格式:
单个字节:0开头
两个字节:第一个字节:110开头 第二个字节:10开头
三个字节:第一个字节:1110开头,第二个字节:10开头,第三个字节:10开头
"你好"的gbk编码的对应二进制数字:
11000001
10101010
11001101
10101000
它正好符合utf-8的编码格式,记事本直接用utf-8来解码,就会出现解码错误。