String.encode和codecs.encode之间有区别吗?

时间:2015-03-01 15:25:07

标签: python unicode encoding utf-8 character-encoding

在阅读有关编解码器,编码和解码的内容时,我发现我应该直接在字符串上使用编码函数,并且工作正常。我之后阅读了除了不同的utf编码之外的unicode和ascii是什么。

但是当进一步阅读时,我发现大多数人似乎都在导入编解​​码器模块并使用模块中的编码。我没有看到String.encode和codecs.encode之间有太大的区别..我使用哪一个很重要?我只是在编码函数中指定我需要的编码。

另外,在阅读这个帖子python string encode / decode时,我查看了接受答案中的链接,该链接显示了一个幻灯片放映,假设“完全揭开unicode和utf的神秘面纱”,但在其中一张幻灯片中,他说utf是用于将数字转换为我看不出的字符是正确的。

根据我在http://www.rrn.dk/the-difference-between-utf-8-and-unicode的理解,这也是在另一个SO线程中引用的,utf不是将数字转换为字符。它将二进制数转换为在unicode中找到的数字或正在使用的另一个选择的字符集。所以utf会将二进制数翻译成一个数字,然后unicode会再将这个数字翻译成一个字符。所以当他试图完全神秘化时,他错了吗?

3 个答案:

答案 0 :(得分:1)

这两个函数的Python文档页面在这里:

https://docs.python.org/2/library/stdtypes.html#str.encode

https://docs.python.org/2/library/codecs.html#codecs.encode


在这样的字符串对象上调用

str.encode()

"this is a string".encode()
使用字符串作为参数调用

codecs.encode(),如下所示:

codecs.encode("this is a string")

他们各自采用可选的encoding参数。

根据文档页面,

str.encode()的默认编码是当前默认编码,但根据Unicode HOWTO"ascii"

codecs.encode()的默认编码为"ascii"


这两个函数都采用默认为errors的{​​{1}}参数。


看起来他们几乎一样,除了他们被称呼的方式。

答案 1 :(得分:1)

  1. >output.txt

将文本编码为字节,将文本编码为字节,然后将字节编码为字节

  1. codecs.encode(obj, encoding='utf-8', errors='strict')

将文本编码为字节

所以,我认为2.⊆1。

答案 2 :(得分:0)

一个区别是您可以使用哪些编解码器。 str.encode 适用于字符串编解码器之间的转换,但请尝试将字符串转换为 base64。

str.encode("base64")
LookupError: 'base64' is not a text encoding; use codecs.encode() to handle arbitrary codecs

但这会起作用

codecs.encode(str.encode(), "base64")

或者这个

base64.encodestring(str.encode())