1

我正在处理一些字符串操作并尝试将它们放入数据库。然后我遇到了这个(我相信是德语):

Sichere Administration von VoIP-Endgeräten

我把它放入数据库后,我意识到非英文字符变成了:

Sichere Administration von VoIP-Endger\u00e4ten

当我从数据库中获取它并将这个字符串传递给 subprocess.Popen() 时,它给出了错误:

TypeError: execv() arg 2 must contain only strings

我的问题是:这是怎么发生的?还有人对如何学习编码/解码有任何有用的参考吗?谢谢。

4

1 回答 1

1

是的,阅读Python Unicode HOWTO;您正在处理编码和 unicode 文本。

Popen()第一个字符串是被解释为 Latin-1 的 UTF-8 数据,第二个字符串是 unicode 字符串,如果不先编码就无法传递:

>>> print u'\u00e4'  # A unicode escape code for the latin-1 character ä
ä
>>> u'\u00e4'.encode('utf8')  # The same character encoded to UTF-8
'\xc3\xa4'
>>> print u'\u00e4'.encode('utf8').decode('latin1')  # Misinterpreted as Latin-1
ä

在将.encode()数据传递给.Popen().

于 2012-12-20T21:51:24.990 回答