django / python:python如何编码非英文字符

时间:2012-12-20 21:50:29

标签: python encoding

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

Sichere Administration von VoIP-Endgeräten

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

Sichere Administration von VoIP-Endger\u00e4ten

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

TypeError: execv() arg 2 must contain only strings

我的问题是:这是怎么发生的?也有人有关于如何学习编码/解码东西的任何有用的参考?感谢。

1 个答案:

答案 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()