标签:
1.了解各种编码的来历及其在计算机内部的存储: http://www.cnblogs.com/JohnABC/p/3507219.html
2.了解二进制文件和文本文件的区别: http://www.cnblogs.com/JohnABC/p/3478134.html
3.了解Python的Unicode和Str编码: http://www.cnblogs.com/JohnABC/p/4015504.html
4.在Python中正确使用Unicode: http://www.cnblogs.com/JohnABC/p/4257574.html
根据以上几篇文章总结以下要点:
1.str和unicode都是basestring的子类, 严格意义上说, str其实是字节串, 它是unicode经过编码后的字节组成的序列
2.对 UTF-8编码的str‘汉‘使用len()函数时, 结果是3, 因为实际上, UTF-8编码的‘汉‘ == ‘\xE6\xB1\x89‘
3.unicode才是真正意义上的字符串, 对字节串str使用正确的字符编码进行解码后获得, 并且len(u‘汉‘) == 1
4.repr()和``做的是完全一样的事情, 它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用内建函数 eval())重新得到该对象, 但str()则有所不同, str()致力于生成一个对象的可读性好的字符串表示, 它的返回结果通常无法用于eval()求值, 但很适合用于print语句输出, 需要再次提醒的是, 并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象
u = u‘汉‘ print repr(u) # u‘\u6c49‘ s = u.encode(‘UTF-8‘) print repr(s) # ‘\xe6\xb1\x89‘ u2 = s.decode(‘UTF-8‘) print repr(u2) # u‘\u6c49‘
5.使用原则
var.decode(encoding)
(如,var.decode(‘utf-8‘)
)。将文本字符串编码成字节,使用var.encode(encoding)。str()
,也不要在不指定编码的情况下就对字节串使用unicode()
。.decode()
将其解释成文本。同样,在将文本发送到外部时,总是对文本调用.encode()
。
标签:
原文地址:http://www.cnblogs.com/JohnABC/p/4257580.html