常见编码表
- ASCII:美国标准信息交换码,用一个字节的7位来表示。
- ISO8859-1:拉丁码表,欧洲码表,用一个自己的8位表示
- GB2312:中国中文编码表。(中国文字太多,有些文字可能失败不了)
- GBK:中国的中文编码升级表,融合了更多的中文文字符号。
- Unicode:国际标准码,融合了多种文字,所有文字都用两个字节来表示,Java语句使用的就是Unicode。
- UTF-8:最多使用三个字节来表示一个字符。
- 但是不管什么码表,都兼容ASCII码表。
编码和解码
将字符串变成字节数组的过程,称之为编码
将字节数组转为字符串的过程:称之为解码
使用系统默认编码表进行编码和解码
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
/**
* 编码解码测试
* 将字符串变成字节数组的过程,称之为编码
* 将字节数组转为字符串的过程:称之为解码
*/
class EncodeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//获取并打印当前系统的默认编码
String csn = Charset.defaultCharset().name();
System.out.println("csn = " + csn);
String str = "编码";
//使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] bytes = str.getBytes();
//打印出“编码”两个中文对应的字节数字
for (byte b: bytes) {
System.out.println("b = " + b);
}
String decodeStr = new String(bytes);
System.out.println("decodeStr = " + decodeStr);
}
}
使用 UTF-8 编码使用 GBK 解码产生乱码
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
/**
* 编码解码测试
* 将字符串变成字节数组的过程,称之为编码
* 将字节数组转为字符串的过程:称之为解码
*/
class EncodeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//获取并打印当前系统的默认编码
String csn = Charset.defaultCharset().name();
System.out.println("csn = " + csn);
String str = "编码";
//使用UTF-8 进行编码
byte[] bytes = str.getBytes("UTF-8");
//打印出“编码”两个中文对应的字节数字
for (byte b: bytes) {
System.out.println("b = " + b);
}
//使用GBK解码
String decodeStr = new String(bytes,"GBK");
System.out.println("decodeStr = " + decodeStr);
}
}
使用指定的编码表进行编码和解码
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
/**
* 编码解码测试
* 将字符串变成字节数组的过程,称之为编码
* 将字节数组转为字符串的过程:称之为解码
*/
class EncodeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//获取并打印当前系统的默认编码
String csn = Charset.defaultCharset().name();
System.out.println("csn = " + csn);
String str = "编码";
//使用UTF-8 进行编码
byte[] bytes = str.getBytes("UTF-8");
//打印出“编码”两个中文对应的字节数字
for (byte b: bytes) {
System.out.println("b = " + b);
}
//使用UTF-8解码
String decodeStr = new String(bytes,"UTF-8");
System.out.println("decodeStr = " + decodeStr);
}
}
关于编码的问题
- 如果在进行编码时,使用了不识别当前文字的码表进行编码,那么这样的编码,将无法被恢复。
- 如果编码正确,解码时错误,则有可能有解。