我正在处理一些字符串操作并尝试将它们放入数据库中。然后我遇到了这个(我相信是德语):
Sichere Administration von VoIP-Endgeräten
将其放入数据库后,我发现非英文字符变成了:
Sichere Administration von VoIP-Endger\u00e4ten
当我从数据库中获取它并将该字符串传递给 subprocess.Popen() 时,它给出错误:
TypeError: execv() arg 2 must contain only strings
我的问题是:这是怎么发生的?还有人有关于如何学习编码/解码内容的有用引用吗?谢谢。
最佳答案
是的,请阅读Python Unicode HOWTO ;您正在处理编码和 unicode 文本。
第一个字符串是 UTF-8 数据,被解释为 Latin-1,第二个字符串是 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
ä
您需要弄清楚外部进程可以处理什么编码,并在将数据传递给 .Popen()
之前对数据调用 .encode()
。
关于python - Django/Python : How does python encode non-English characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13981092/