笔试问到,一脸懵逼,记录下来
ASCII码是一个字节,但是明显太小了,里面没有中文,所以就有了GBK2312,把中文加进去
Unicode是两个字节,够存放所有字符,但是所有字符都用两个字节太浪费空间
UTF-8是可变长度字符编码,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
在python3中jsom库dump或者load时会默认转码为unicode,因此如果json中有中文要进行查找key的话,需要加上u,如dict[u'中国']
c++版
#include <fstream>
#include <iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
int main(){
srand((unsigned)time(NULL));
int iRange1 = 0xf7 - 0xb0;
int iRange2 = 0xfe - 0xa1;
for (int i=0;i<10;++i)
{
char iCode1 = rand()%iRange1 + 0xb0;
char iCode2 = rand()%iRange2 + 0xa1;
char ch[3] = {iCode1,iCode2,0};
cout<<ch<<endl;
}
return 0;
}
python版,有两种编码方式
import random
def Unicode():
val = random.randint(0x4E00, 0x9FBF)
return unichr(val)
def GB2312():
head = random.randint(0xB0, 0xCF)
body = random.randint(0xA, 0xF)
tail = random.randint(0, 0xF)
val = ( head << 8 ) | (body << 4) | tail
str = "%x" % val
return str.decode('hex').decode('gb2312')