Почему мы должны кодировать и декодировать в Python? - PullRequest
1 голос
/ 01 октября 2019

Каков вариант использования кодирования / декодирования?

Насколько я понимаю, кодирование используется для преобразования строки в байтовую строку, чтобы иметь возможность передавать данные не в формате 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)

Вывод:

enter image description here

Так, каков случай использования кодирования и декодирования в python?

Ответы [ 2 ]

4 голосов
/ 01 октября 2019

Среда, в которой вы работаете, может поддерживать эти символы, в дополнение к этому ваш терминал (или все, что вы используете для просмотра вывода) может поддерживать отображение этих символов. Некоторые терминалы / командные строки или текстовые редакторы могут не поддерживать их. Помимо отображения проблем, вот некоторые фактические причины и примеры:

1- При передаче данных через Интернет / сеть (например, через сокет) информация передается в виде необработанных байтов. Не-ascii символы не могут быть представлены одним байтом, поэтому нам нужно специальное представление для них (utf-16 или utf-8 с более чем одним байтом). Это самая распространенная причина, с которой я столкнулся.

2- Некоторые текстовые редакторы поддерживают только utf-8. Например, вам нужно представить свой символ в формате utf-8, чтобы работать с ними. Причина этого в том, что при работе с текстом люди обычно используют символы ASCII, которые составляют всего один байт. Когда некоторые системы нужно было интегрировать с не-символами ascii, люди конвертировали их в utf-8. Некоторые люди с более глубокими знаниями о текстовых редакторах могут дать лучшее объяснение по этому вопросу.

3- У вас может быть текст, написанный с символами Юникода с некоторыми китайскими / русскими буквами, и по какой-то причинесохраните его на своем удаленном сервере Linux. Но ваш сервер не поддерживает письма с этих языков. Вам необходимо преобразовать ваш текст в какой-то строгий формат (utf-8 или utf-16) и сохранить его на своем сервере, чтобы вы могли восстановить его позже.

Вот небольшое объяснение UTF-8формат . Есть также другие статьи на эту тему, если вы заинтересованы.

0 голосов
/ 01 октября 2019

Используйте кодировку utf-8, потому что она универсальна. Установите в редакторе кода кодировку utf-8 и поместите в начало всех файлов Python:
# coding: utf8
Когда вы получаете ввод (файл, строка ...), он может иметь другую кодировкутогда вы должны получить его тип кодирования и декодировать его. Пример кодирования в HTML-файле находится в мета-бализе. Если вы изменили что-то в файле HTML и хотите сохранить его или отправить по сети, то вам придется кодировать его в том виде, в котором он был ранее.

Всегда используйте Unicode для вашей строки в Python. (Автоматически для python 3, но для python2.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 При входе узнайте кодировку ваших данных и декодируйте с декодированием ().

4 На выходе закодируйте в ожидаемую кодировку системой, которая получит данные, или, если вы не можете знать это, в UTF8, с помощью encode ().

...