У меня есть строка 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.