字符集
ASCLL 码不包含中文
GBK 是中文专用
Unicode 国际通用
UTF-8 可变长编码
ISO 8859-1
编码解码
编码: 字符转二进制, 便于传输
示例:
- String str = "我是一个好人";
- byte[] dates = str.getBytes();// 括号汇总可选填字符集名称, 表示按某种字符集编码
解码: 将二进制机器码转化为字符, 便于阅读
示例: 将网络上传来的数据转换为字符串
str = new String(dates); //str 与 dates 为上文中的变量. new String 的方法请查看 String 类的构造方法.
乱码解决
转码时导致乱码可能有两种原因:
1. 接收的数据不完整
如: str = new String(bytes,0,bytes.length-1);
2. 字符集不统一
如: 将中文使用 ISO-8859-1 解码导致乱码
str = new String(sBytes,"ISO-8859-1");
本文代码
- public class Charset
- {
- public static void main(String[] args){
- String str = "我是好人";
- byte[] sBytes = str.getBytes();// 按默认字符集解码
- System.out.println(sBytes.length);
- for(byte b : sBytes){
- System.out.println(b);
- }
- System.out.println("------------------");
- // 乱码原因
- // 丢失数据
- str = new String(sBytes,0,sBytes.length-1);
- System.out.println(str);// 输出结果为: 我是好?
- // 编码错误
- try{
- str = new String(sBytes,"ISO-8859-1");
- }catch(Exception e){
- System.err.println("解码异常!");
- }
- System.out.println(str);// 输出结果:?????
- }
- }
来源: http://www.bubuko.com/infodetail-3298195.html