字符编码理解

计算的本质是二进制的运算,所以要想把现实生活中的文字、图片、语音等信号媒介用计算机来处理,必须把这些东西切分成基本元素,然后把每一个元素一一映射为数字,这是最基本的做法。

  • 英语切分成最基本的元素就是26个字母大小写加上英语中用到的所有标点,于是就产生了ascii编码;
  • 汉语切分成最基本的元素就是从古至今中国出现的所有的汉字,简体、繁体、生僻的都算上,于是就产生中国人自己的一些编码方式,如gbk;
  • 其它国家都可以归为上面这两类;
  • 每个国家都有自己的字符集,这让计算机很难做啊,而且每个字符集编码还在发展变化,所以统一工作势在必行,于是就有了unicode;
  • unicode并不是从0开始编码,它的编码思想就是我取足够长的01向量,在各国编码的基础上在前面补0,这样做带来一个明显的问题,在计算机内存中处理起来简单了,但是存成文件或者传输起来会浪费空间,尤其对英语世界的来说;
  • unicode说,好吧,咱们各让一步,在unicode的基础上为了节省存储动态的决定01向量长短,于是产生了utf-8编码;
  • 这样就有了unicode—utf-8------chars set三个集合之间的一一映射,但是要考虑互相掣肘的两个问题:1⃣️在内存中运算方便,2⃣️存储和传输轻量,最后妥协的办法是,在内存中用unicode编码,在文件中用utf-8;
  • 一个例子:一个abc.txt,是文件形态时是utf-8,用记事本打开时,载入到内存就是用unicode;
  • 其它编码类似,但是utf-8 Linux、mac公认,省心吧;
import java.nio.charset.StandardCharsets;

public class Str {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 默认用unicode编码,或者明确指出
		byte[] data = "中文abc".getBytes(StandardCharsets.UTF_8);
		// 默认用unicode解码,或者明确指出
		String s2 = new String(data, StandardCharsets.UTF_8);
		System.out.println(s2);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值