写代码总是莫名其妙的乱码?这一篇教你从原理出发彻底干掉它

前言中文乱码问题在我们日常开发中司空见惯,那么乱码问题是如何产生的呢?又怎样去解决乱码问题呢?本文将结合基本概念和例子展开阐述,希望大家有收获。一个简单乱码的例子package whx;import java.io.UnsupportedEncodingException;public class TestEncodeAndDecode { public static void main(String[] args) throws UnsupportedEncodingExce
摘要由CSDN通过智能技术生成

前言

中文乱码问题在我们日常开发中司空见惯,那么乱码问题是如何产生的呢?又怎样去解决乱码问题呢?本文将结合基本概念和例子展开阐述,希望大家有收获。

一个简单乱码的例子

package whx;

import java.io.UnsupportedEncodingException;

public class TestEncodeAndDecode {
    public static void main(String[] args) throws UnsupportedEncodingException {

        String str = "测试中文乱码";
        byte[] b = str.getBytes("GBK");
        System.out.println(new String (b,"UTF-8"));
    }
}
复制代码

用GBK编码,用utf-8解码,产生乱码,运行结果如下:

写代码总是莫名其妙的乱码?这一篇教你从原理出发彻底干掉它

 

相关基础概念

要理解乱码的根源,需要先了解清楚位、字节、字符、字符集等相关概念。

位(bit)

位是计算机存储数据的最小单位,1或者0就表示1位,如10010010就表示8位的二进制数。

字节

字节是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。

1 B = 8 bit (1字节等于8位)
1 KB = 1024 B = 1024 字节
1 MB = 1024 KB 
1 GB = 1024 MB
1 TB = 1024 GB
复制代码

字符

字符是指计算机中使用的字母、数字、字和符号,是数据结构中最小的数据存取单位。如a、A、B、b、大、+、*、%等都表示一个字符;

在 ASCII 编码中,一个英文字母字符存储需要1个字节。
在 GB 2312 编码或 GBK编码中,一个汉字字符存储需要2个字节。
在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。
在UTF-16编码中,一个英文
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值