GBK编码格式转成UTF8,本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去

          今天看到了一个没头没尾的问题

一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?

          为啥说没头没尾呢,大概并没有弄明白编码和编码格式zhe'laing'zhong 东西的定义

编码

编码: unicode就是一种“编码”,就是一个编号(数字)到字符的一种映射关系,可以理解成一个很大的对应表格,里面一个编号对应一个字符,我们内存存储啥东西呢,存储的是这个编号

编码格式

编码格式:采用某种标准来序列化前面提到的那个编号,这样可能不好理解,比如说,
   
GBK标准:他只覆盖了中文------unicode中的一小部分,所以它事先算好了只要2个字节(2的16次方)就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,存的就是0——216 的数字
   
UTF-8:考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存储一个字符的编码(就是编号)的时候,使用的字节长度也从1字节到4字节不等;

          那么啥叫作一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作? 我理解大概是,本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去。

          本来二进制数据是utf-8的,如果我们4字节4字节的读取,那么字符是正确的,但是我们2字节2字节的读,就得到了一堆乱码。我们先用GBK 对乱码进行编码,在内存里面存了一串2字节数字,在用utf-8解码,4字节4字节的去读,就能还原了。

          那其实就再走一遍流程,编码(用gbk)、解码(用utf-8)回去,就能得到正确的字符串

posted on 2021-06-06 18:01  雾恋过往  阅读(580)  评论(0编辑  收藏  举报

Live2D