【问题标题】:Why do we need to encode and decode in python?为什么我们需要在python中编码和解码?
【发布时间】:2020-01-30 14:12:47
【问题描述】:

编码/解码的用例是什么?

我的理解是编码用于将字符串转换为字节字符串,以便能够在整个程序中传递非 ascii 数据。而decode就是把这个字节串转回字符串。

但是跟着。示例显示非 acsii 字符即使未编码/解码也能成功打印。示例:

val1="À È Ì Ò Ù Ỳ Ǹ Ẁ"
val2 = val1
print('val1 is: ',val2)

encoded_val1=val1.encode()
print('encoded_val1 is: ',encoded_val1)

decoded_encoded_val1=encoded_val1.decode()
print('decoded_encoded_val1 is: ',decoded_encoded_val1)

输出:

那么python中encode和decode的用例是什么?

【问题讨论】:

  • 请提供一些背景信息,说明您正在尝试做什么,以便我们可以更好地帮助您。对 Unicode 字符串进行编码会创建变量的字节字符串。您不必对字符串进行编码。这取决于您要执行的操作。
  • encode和decode的用例是什么?

标签: python python-3.x decode encode


【解决方案1】:

您正在使用的环境可能支持这些字符,此外您的终端(或您用来查看输出的任何设备)可能支持显示这些字符。某些终端/命令行或文本编辑器可能不支持它们。除了显示问题之外,还有一些实际原因和示例:

1- 当您通过互联网/网络传输数据(例如使用套接字)时,信息将作为原始字节传输。非 ascii 字符不能用单个字节表示,因此我们需要对它们进行特殊表示(utf-16 或 utf-8 超过一个字节)。这是我遇到的最常见的原因。

2- 一些文本编辑器只支持 utf-8。例如,您需要以 utf-8 格式表示您的 字符才能使用它们。原因是在处理文本时,人们大多使用 ASCII 字符,它只有一个字节。当某些系统需要与非 ascii 字符集成时,人们将它们转换为 utf-8。一些对文本编辑器有更深入了解的人可能会对这一点给出更好的解释。

3- 你可能有一个用 unicode 字符和一些中文/俄文字母写成的文本,并且出于某种原因将它存储在你的远程 Linux 服务器中。但是您的服务器不支持这些语言的信件。您需要将文本转换为某种严格的格式(utf-8 或 utf-16)并将其存储在您的服务器中,以便以后恢复它们。

这里是UTF-8 format的一点解释。如果您有兴趣,还有其他关于该主题的文章。

【讨论】:

    【解决方案2】:

    使用 utf-8 编码,因为它是通用的。 将代码编辑器设置为 utf-8 编码并放在所有 python 文件的顶部:
    # coding: utf8
    当您获得输入(文件,字符串...)时,它可以具有不同的编码,然后您必须获取他的编码类型并对其进行解码。 HTML 文件编码类型中的示例是元应答。 如果您更改 HTML 文件中的某些内容并希望保存或通过网络发送,则必须将其编码为之前的编码类型。

    始终在 python 中为您的字符串使用 unicode。 (对于 python 3 是自动的,但对于 python2.7 使用前缀 u like u'Hi')

    $ python2.7
    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> type('this is a string') # bits => encoded
    <type 'str'>
    >>> type(u'this is a string') # unicode => decoded
    <type 'unicode'>
    
    $ python3
    Python 3.2.3 (default, Oct 19 2012, 20:10:41) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> type("this is a string") # unicode => decoded
    <class 'str'>
    >>> type(b"this is a string") # bits => encoded
    
    <class 'bytes'>
    



    1 使用 UTF8。现在。全部结束。

    2 在您的代码中,指定文件编码并将您的字符串声明为“unicode”。

    3 入口处,知道你数据的编码,用decode()解码。

    4 在输出端,将接收数据的系统按照预期的编码进行编码,或者如果您不知道,使用 UTF8,使用 encode()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多