背景
聊了许多关于编码相关的基本知识。那么其实在我们开发过程中通常会碰到哪些问题呢???
先看一首七言绝句
手持两把锟斤拷
口中疾呼烫烫烫
脚踏千朵屯屯屯
笑看万物锘锘锘
乱码
锟斤拷
主要是因为在unicode编码转成GBK是出错的,因为并不是所有的字都能够用unicode表示,因此就会导致一些unicode无法比较的字默认填充一些字符,而unicode一般填充的是 \xef\xbf\xbd(UTF-8),而反复填充这些字符,就类似于这种形式:
\xef\xbf\xbd\xef\xbf\xbd,而当使用GBK进行解析的时候,按照汉字占两个字节的规则,0xEFBF就对应“锟”, 0xBDEF对应“斤”,0xBFBD对应“拷”,所以就出现了这乱码了
烫烫烫
屯屯屯
烫烫烫和屯屯屯产生自VC,这是debug模式下VC对内存的初始化操作。VC会把栈中新分配的内存初始化为0xcc,而把堆中新分配的内存初始化为0xcd。(0xcc恰好是终端指令int 3,算是保护吗?)把0xcc和0xcd按照字符打印出来,就是烫和屯了。
锘锘锘
php 返回的 UTF-8 数据 开头自动加了 标志,是对于 UTF-8的标识。对于 javascript 来说,不会在意这个标识,依然当作数据来读,所以就会出现 这个经典的 “锘”乱码。