Python 2 неправильно декодирует строку Юникода (в то время как Python 3 делает) - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть строка Unicode в Python 2, содержащая специальный символ, который я пытаюсь правильно кодировать и декодировать.

Это поведение в Python 2 :

Python 2.7.15 (default, Nov 27 2018, 21:24:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> street = u'Berlin Straße'.encode('utf-8')
>>> street
'Berlin Stra\xc3\x9fe'
>>> street.decode('utf-8')
u'Berlin Stra\xdfe'

как видите, он декодируется как \xdf вместо \xc3\x9f

In Python 3 Вместо этого у меня нет этой проблемы:

Python 3.7.2 (default, Feb 12 2019, 08:15:36)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> street = u'Berlin Straße'.encode('utf-8')
>>> street
b'Berlin Stra\xc3\x9fe'
>>> street.decode('utf-8')
'Berlin Straße'

Единственное различие, которое я заметил, заключается в том, что после кодирования в Python 2 street - это str, а в Python 3 - bytes.

Должен ли я также преобразовать строку Python 2 в байты?Если да, каков наилучший способ сделать это?

ps: мой код должен быть совместим как с Python 2, так и с Python 3.

...