我正在处理一些字符串操作并尝试将它们放入数据库中。然后我遇到了这个(我相信它是德国人):
Sichere Administration von VoIP-Endgeräten
我把它放入数据库后,我意识到非英文字符变成了:
Sichere Administration von VoIP-Endger\u00e4ten
当我从数据库中获取它并将此字符串传递给subprocess.Popen()时,它会给出错误:
TypeError: execv() arg 2 must contain only strings
我的问题是:这是怎么发生的?也有人有关于如何学习编码/解码东西的任何有用的参考?感谢。
答案 0 :(得分:1)
是的,请阅读Python Unicode HOWTO;你正在处理编码和unicode文本。
第一个字符串是被解释为Latin-1的UTF-8数据,第二个字符串是unicode字符串,如果没有首先编码,则无法传递给Popen()
:
>>> 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()
。