
或者直接写str类型的字符串
- def main():
- name = 'Python之禅'
- with open("output.txt", "w") as f:
- f.write(name)
当然,把 unicode 字符串精确地写入文件不止一种方法,但道理是一样的,这里不再介绍,把字符串写入数据库,传输到收集都是同样的道理
UnicodeDecodeError
UnicodeDecodeError 产生在 str 类型的字节序列解码成 unicode 类型的字符串时
- >>> a = u"禅"
- >>> a
- u'\u7985'
- >>> b = a.encode("utf-8")
- >>> b
- '\xe7\xa6\x85'
- >>> b.decode("gbk")
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- UnicodeDecodeError: 'gbk' codec can't decode byte 0x85 in position 2: incomplete multibyte sequence
把一个经由 UTF-8 编码后生成的字节序列 '\xe7\xa6\x85' 再用 GBK 解码转换成 unicode 字符串时,出现 UnicodeDecodeError,因为 (对于中文字符)GBK 编码只占用两个字节,而 UTF-8 占用3个字节,用 GBK 转换时,还多出一个字节,是以它没法解析。避免 UnicodeDecodeError 的关键是保持 编码和解码时用的编率攀类型一致。
这也答复了文┞仿开首说的字符 "禅",保存到文件中有可能占3个字节,有可能占2个字节,具体处决于 encode 的时刻指定的编码格局是什么。
再举一个 UnicodeDecodeError 的例子
- >>> x = u"Python"
- >>> y = "之禅"
- >>> x + y
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
- >>>
str 与 unicode 字符串 履行 + 操作时,Python 会把 str 类型的字节序列隐式地转换成(解码)成 和 x 一样的 unicode 类型,但Python是应用默认的 ascii 编率攀来转换的,而 ASCII字符集中不包含有中文,所以报错了。相当于:
- >>> y.decode('ascii')
- Traceback (most recent call last):
- File "<stdin>"
推荐阅读
捷报道,美国华盛顿大年夜学的研究人员正在研究所谓的“智能织物”,他们的重点放在磁化纺织品上。这种纺织品可以存储能被磁力仪攫取的少量数据,包含存储在大年夜多半智妙手机内部的数据。这>>>详细阅读
本文标题:一筹莫展?来看看字符编码的前世今生吧
地址:http://www.17bianji.com/lsqh/38408.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示