返回介绍

在 Python 2.6 中编码 Unicode 字符串

发布于 2024-01-29 22:24:14 字数 2002 浏览 0 评论 0 收藏 0

既然已经介绍了Python 3.0中基本的Unicode字符串知识,我需要说明的是,在Python 2.6中可以做很多相同的事情,尽管所使用的工具是不同的。unicode在Python 2.6中是可用的,但它是与str截然不同的数据类型,并且当常规字符串和Unicode字符串兼容的时候,它允许自由组合。实际上,当遇到把raw字节编码为一个Unicode字符串的时候,我们基本上可以把Python 2.6的str当做Python 3.0的bytes,只要它保持正确的形式。如下是在Python 2.6中的实际应用(本章所有其他节都是在Python 3.0下运行的情况):

为了存储任意的编码的Unicode文本,用u 'xxx'常量形式创建一个unicode对象(这个常量在Python 3.0中不再可用,因为Python 3.0中所有字符串都支持Unicode):

一旦创建了它,可以把Unicode文本转换为不同的raw字节编码,这类似于在Python 3.0中把str对象编码为bytes对象:

在Python 2.6中,非ASCII字符可以用十六进制或Unicode转义来编写到字符串常量中,就像在Python 3.0中一样。然而,和Python 3.0中的bytes一样,在Python 2.6中,"\u..."和"\U..."转义只是识别为unicode字符串,而不是8位str字符串:

就像Python 3.0中的str和bytes一样,Python 2.6的unicode和str共享几乎相同的操作集,因此,除非你需要转换为其他的编码,通常可以把unicode当做是str一样对待。然而,Python 2.6和Python 3.0之间的一个主要区别在于,unicode和非Unicode的str对象可以在表达式中自由地混合,并且,只要str和unicode的编码兼容,Python将自动将其向上转换为unicode(在Python 3.0中,str和bytes不会自动混合,并且需要手动转换):

实际上,类型的不同对于Python 2.6中的代码往往很小。像常规的字符串一样,Unicode字符串也可以合并、索引、分片,用re模块匹配,等等,并且它们不能原处修改。如果需要在两种类型之间显式地转换,可以使用内置的str和unicode函数:

然而,Python 2.6中这种自由混合字符串类型的方法,只有在字符串和unicode对象的编码类型兼容的情况下才有效:

最后,正如我们将在本章稍后更具体介绍的,Python 2.6的open调用只支持8位字节的文件,将其内容返回为str字符串;将其内容解释为文本,还是解释为二进制数并根据需要解码,这取决于你。要读取和编写Unicode文件并自动编码或解码器内容,使用Python 2.6的codecs.open调用,Python 2.6的库手册中有所介绍。这个调用提供了与Python 3.0的open相同的功能,并且使用Python 2.6的unicode对象来表示文件内容——读取一个文件,把编码的字节翻译为解码的Unicode字符,并且在文件打开的时候把翻译字符串写入想要的指定编码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文