Python 3 喜欢字符串转换 python 2

Python 3 like string conversion in python 2

我正在将我的代码移植到 python 3 并保持向后兼容性。

python 2 和 python 3 中的 str 函数以不同方式转换具有非 ASCII 字符的字符串。例如:

Python 2:

In [4]: str('Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve')
Out[4]: 'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. L\xc3\xb6ve & D. L\xc3\xb6ve'

但在 Python 3:

In [1]: str('Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve')
Out[1]: 'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve'

Python 3 如何在 Python 2 中获得相同的表示?我正在将字符串写入 sqlite3 table。

看来您想要的是 unicode 字符串文字。在 Python 3 中,所有普通字符串文字都是 unicode 字符串文字。在 Python 2 中,只有 unicode 值是 unicode 字符串。在 Python 2 中创建一个 unicode 字符串文字是通过在文字前面放置一个 u 来完成的:

u'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve'

这与您的 Python 3 字符串的表示相同。注意,如果你的源文件是UTF-8编码,你需要在第一行或第二行添加特殊的注释来表明这一点,例如:

# -*- coding: utf-8 -*-

有关这方面的更多信息,请参阅 PEP 263 or this other question