为什么我们需要在Python中进行编码和解码?

5

编码(encode)和解码(decode)的用途是什么?

我的理解是,编码用于将字符串转换为字节字符串,以便能够在程序之间传递非ASCII数据。而解码则是将此字节字符串转换回字符串。

但是以下示例显示,即使未进行编码或解码,非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中编码和解码有什么用途呢?


请提供一些上下文,以便我们更好地帮助您。对您的Unicode字符串进行编码会创建一个变量的字节字符串。您不必对字符串进行编码。这取决于您要做什么。 - Moritz03
1
编码和解码的用例是什么? - variable
2个回答

9
您所使用的环境可能支持这些字符,此外,您的终端(或任何用于查看输出的工具)也可能支持显示这些字符。但有些终端/命令行或文本编辑器可能不支持它们。除了显示问题,以下是一些实际的原因和示例:
1- 当您通过互联网/网络传输数据(例如通过套接字),信息将作为原始字节传输。非 ASCII 字符无法由单个字节表示,因此我们需要一种特殊的表示方法(utf-16 或 utf-8,使用多个字节)。这是我遇到的最常见的原因。
2- 一些文本编辑器仅支持 utf-8。例如,您需要以 utf-8 格式表示您的 字符才能使用它们。原因是在处理文本时,人们大多使用 ASCII 字符,这些字符只占一个字节。当某些系统需要与非 ASCII 字符集成时,人们将它们转换为 utf-8。一些对文本编辑器有更深入了解的人可能会给出更好的解释。
你可能会有一些包含中文或俄文字符的Unicode文本,并将其存储在远程Linux服务器上。但是你的服务器不支持这些语言的字母。你需要将文本转换为某种严格的格式(utf-8或utf-16),并将其存储在服务器上,以便以后可以恢复它们。
这里有一个关于UTF-8格式的简要解释。如果你感兴趣,还有其他相关文章。

0

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

始终在Python中使用Unicode字符串。(对于Python 3自动处理,但对于Python 2.7,请使用前缀u,如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 在输出时,请使用接收数据的系统所期望的编码进行编码,如果您无法知道它,则使用encode()进行UTF8编码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接