编码解码乱码字符集[通俗易懂]
编码 通俗易懂 乱码 字符集 解码
2023-06-13 09:11:52 时间
大家好,又见面了,我是你们的朋友全栈君。
编码EnCode:将字符转化为字节
解码DeCode:将字节转化为字符
乱码:打个比方—比较多人知道的联通 用字符集GBK的时候出现这样的情况:��ͨ,这就是乱码
常见的中文字符集有:GBK 和 UTF-8
国际上常用的字符集:Unicode(大字典)、ANSI
UTF-8,中文占三个字节,英文占一个字节(变长),还有定长占两个字节(耗费空间多)
GBK,中文占两个zijie
下面模拟编码:
我的默认的编码字符集为:
import java.io.UnsupportedEncodingException;
/**
* 编码:将字符转化为字节
* @author Administrator
*
*/
public class MyEnCode {
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "性命生命使命a";
//默认字符集编码,这里默认为GBK
byte[] datas = msg.getBytes();
System.out.println(datas.length);
//使用不同字符集编码,如UTF-8
datas = msg.getBytes("UTF-8");
System.out.println(datas.length);
}
}
结果显示:
13
19
说明:不同的字符集得到的字节数是不一样的
下面模拟解码的情况:
import java.io.UnsupportedEncodingException;
/**
* 编码:将字符转化为字节
* 解码:将字节转化为字符
* @author Administrator
*
*/
public class MyDeCode {
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "性命生命使命a";
//编码
byte[] datas = msg.getBytes();
//解码
msg = new String(datas,0,datas.length,"GBK");
System.out.println(msg);
//乱码:
//(1)字节数不够
msg = new String(datas,0,datas.length-2,"GBK");
System.out.println(msg);
msg = new String(datas,0,datas.length-1,"GBK");
System.out.println(msg);
//(2)没有使用和默认一样的字符集
msg = new String(datas,0,datas.length-1,"UTF-8");
System.out.println(msg);
}
}
结果:
性命生命使命a
性命生命使?
性命生命使命
???????????
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138745.html原文链接:https://javaforall.cn
相关文章
- base64编码图片 生成图片,返回地址[通俗易懂]
- C#生成ANSI编码格式的文件[通俗易懂]
- labview霍夫曼编码_香农编码与霍夫曼编码[通俗易懂]
- 二进制编码使用知识及运算
- 避免硬编码[通俗易懂]
- 回顾各种编码的创新和异同-MEPG2, MPEG4, H.264/AVC以及H.265/HEVC比较[通俗易懂]
- 编码通信与魔术初步(三)——最大熵模型
- redis | 对象编码种类
- MySQL连接编码设置:确保正确的字符集表示(mysql连接编码设置)
- Linux编码格式探索之旅(查看linux的编码格式)
- 从 Redis 存储编码的角度看,优化 Redis 数据存储方式的几个建议(redis存储编码)
- MySQL导出GBK——轻松解决中文编码问题(mysql导出gbk)
- Oracle内容重新出发重新编码(oracle内容再次编码)
- javabig5到gb2312的编码转换
- JS与C#编码解码
- c#通过unicode编码判断字符是否为中文示例分享