下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >编程语言 >Python编码和Unicode (2)

Python编码和Unicode (2)

课课家iOS游客发布于 2018-01-05 10:13查看:608回复:1

当Python自动地编码/解码

在一些情况下,当Python自动地使用ASCII进行编码/解码的时候会抛出错误。

第一个案例是当它试着将Unicode和字节串合并在一起的时候。

image.png

在合并列表的时候会发生同样的情况。Python在列表里有string和Unicode对象的时候会自动地将字节串解码为Unicode。

image.png

或者当试着格式化一个字节串的时候:

image.png

基本上当你把Unicode和字节串混在一起用的时候,就会导致出错。

在这个例子里面,你创建一个utf-8文件,然后往里面添加一些Unicode对象的文本。就会报UnicodeDecodeError错误。

image.png

你可以使用codecs模块把文件作为Unicode加载来解决这个问题。

image.png

正如你看到的,由codecs.open 创建的流在当数据被读取的时候自动地将比特串转化为Unicode。

最佳实践

1.最先解码,最后编码

2.默认使用utf-8编码

3.使用codecs和Unicode对象来简化处理

最先解码意味着无论何时有字节流输入,需要尽早将输入解码为Unicode。这会防止出现len( )和切分utf-8字节流发生问题。

最后编码意味着只有你打算将文本输出到某个地方时,才把它编码为字节流。这个输出可能是一个文件,一个数据库,一个socket等等。只有在处理完成之后才编码unicode对象。最后编码也意味着,不要让Python为你编码Unicode对象。Python将会使用ASCII编码,你的程序会崩溃。

默认使用UTF-8编码意味着:因为UTF-8可以处理任何Unicode字符,所以你最好用它来替代windows-1252和ASCII。

codecs模块能够让我们在处理诸如文件或socket这样的流的时候能少踩一些坑。如果没有codecs提供的这个工具,你就必须将文件内容读取为字节流,然后将这个字节流解码为Unicode对象。

codecs模块能够让你快速的将字节流转化为Unicode对象,省去很多麻烦。

 

解释UTF-8

最后的部分是让你能对UTF-8有一个入门的了解,如果你是个超级极客可以无视这一段。

利用UTF-8,任何在127和255之间的字节是特别的。这些字节告诉系统这些字节是多字节序列的一部分。

image.png

最后3字节是一个UTF-8多字节序列。如果你把这三个字节里的第一个转化为2进制可以看到以下的结果:

image.png

前3比特告诉系统它开始了一个3字节序列226,128,147。

那么完整的字节序列。

image.png

然后你对三字节序列运用下面的掩码。

image.png


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • 课课家运营团队
    • 酸酸~甜甜
    • Mr ken
    • YUI
    • cappuccino
    • mr jack
    • IT宅男
    • Mright
    • 课课家技术团队1
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: