参考的文章有:
https://my.oschina.net/gooke/blog/354300
1字节 = 8比特 1Byte = 8bit
计算机处理数据的最小单位是位 位用0,1数字表示
最小表示方式是字节
一个字节有8位,所以有2的8次方种可能,最大是(十进制:256)(二进制:11111111)
一个字节放入1个ASCII码,二个字节放入1个汉字
ASCII编码:只能表示大小写字母,数字,一些符号
ASCII码是7位编码,ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。专门给英语国家设计的编码。
GB2312编码:中文字符集,只收录了6763个常用汉字,字符集中除常用简体汉字字符外还包括希腊字母、日文等字符,未收录繁体中文汉字和一些生僻字。
GBK:GBK编码是GB2312编码的超集,共收录了21003个汉字,向下完全兼容GB2312。
ISO8859-1:又称Latin-1或“西欧语言”。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用变音符号的拉丁字母语言使用。
Unicode :又称万国码,顾名思义,unicode中收录了世界各国语言,用以解决传统编码的局限性。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。通常是2个字节表示一个字符
UTF-8:(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码。
有2点:
1、不同编码,字符所占的字节不一样。ascii占一个字节,gb2312、gbk、unicode用2个字节表示一个字符,utf-8是可变长的,英文用1个字节,汉子用3个字节。
2、同一个字符在不同的编码表中位置不同,所以编码解码要用同一个编码方式。比如汉字‘中’在GBK中是D6D0,而在unicode中是4E2D。
java默认使用的unicode编码,所有字符在JVM(内存中)只有一个存在形式就是unicode。所以一个char占用2个字节。
程序里输入“汉字”:
1.java会以默认的unicode对“汉字”进行编码,占用4个字节存储在内存中
汉字
(6c49)(5b57)
2、当要写入文件时,按程序指定的utf-8编码对“汉字”重新编码,存储在utf.txt文件中。
(e6b189)(e5ad97)
3、如果用GDK解码,就乱码了
姹戈瓦...
(e6b189)(e5ad97)
如何相互转化:
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73260878e482a958448e435061e5a33b4ec7e715052ce963c365bf40d0bf7f03471371e23b586ca8e579ff0d47272d43034065dc001498f4cb8cb30729d76c70bfeaf6ebdfcaf6c87eb8f93895b008c154521d0b7cd0d1715ba38b0546ca3b19838025e63aded4172ff286028ef6206f650f991256e7696f7ad011c9b7d81270697de6fe37f05b562f8420c2435f30af7480a7677a61830ff352a04e3fc5c977c2e117ee01f&p=8b2a9703bad857ff57ed977d7f5280&newp=83769a4799d011a058ee973a134098231610db2151d6d301298ffe0cc4241a1a1a3aecbf2729150fd9c67e6503af495de0f33377370834f1f689df08d2ecce7e609b&user=baidu&fm=sc&query=AttributeError%3A+%27str%27+object+has+no+attribute+%27decode%27&qid=deb0de5000024fae&p1=22
参考资料:
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73d67848d5f3883c71fcf314c413037bee43a674b5d88d87e6502ae4c5aeff13c71370422bc9c99834ddaea917f2bde2d64201a8d4011d919acc9477192719b5aecad1ce3baa33091accfd1dd5752c0570f798bf3805e001ecb68fa1062e2a39d481e5516bceb3761ae0a727e987045e214aaeb626501d6a1d75e4ec13e953c51c1a077fb7848e84fb31f6a3332a55bc70c465635f73b57e8454d13e2ed4a945d6e4052a139b6aeb1b4fc3e89cb9a42&p=80578b15d9c342ab40aac62d021498&newp=83759a45d5c70efc57efc02450059c231610db2151d3d401298ffe0cc4241a1a1a3aecbf27291407d4c67c610aab4d58ecf63572340634f1f689df08d2ecce7e60&user=baidu&fm=sc&query=python+%D7%D6%B7%FB%B4%AE+%C7%B0%D7%BA&qid=8ad00d610000accc&p1=2
解决python3 UnicodeEncodeError: 'gbk' codec can't encode character 'xXX' in position XX
http://blog.csdn.net/jim7424994/article/details/22675759