我需要把unicode文件转换成ascii码。如果一个字母在ascii中不存在,它应该被转换成它最接近的ascii表示。
我正在为它使用Unidecode工具(https://pypi.python.org/pypi/Unidecode)。当我在CL上的Python解释器中使用它时,它工作得很好(因此,通过调用python
然后导入库,然后像这样打印解码的单词:print unidecode(u'äèß')
)
不幸的是,当我试图直接在命令行上使用这个工具时(因此,通过执行类似python -c "from unidecode import *; print unidecode(u'äèß')"
的操作,它只会精确地输出乱码(A$?A"A
),即使它应该已经打印(并在解释器中打印)aess
)。这很烦人,我不知道怎么解决这个问题。我想这可能是由于我的终端编码错误,没有被正确地设置为utf-8或其他什么。但是,在我的终端中,locale
打印了以下输出:
LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL="de_DE.UTF-8"
或者,可能是因为Python在命令行上对StdIn编码有问题?它在python解释器中给了我正确的输出,但是当调用python -c
时却没有。在
你们有主意吗?在
如果您尝试在文件中写入:
要解决此问题,请执行以下操作:
^{pr2}$所以,您需要像这样从命令行调用:
^{3}$进一步阅读:Correct way to define Python source code encoding
当您在终端中输入“äß”,虽然您看到的是“äß”,但终端会看到字节。如果您的终端编码是
utf-8
,那么它会看到字节所以当你打字的时候
^{pr2}$在命令行,终端(假设使用utf-8编码)看到
^{3}$这不是您打算发送给Python的unicode。在
有很多方法可以解决这个问题,也许是为了方便:
让终端将
äèß
更改为\xc3\xa4\xc3\xa8\xc3\x9f
,然后 将其解码为utf-8
:如Nehal J.Wani的解决方案所示,声明一个编码:
但是,这需要在两行上编写命令。
因为
u'äèß
相当于u'\xe4\xe8\xdf'
,所以可以避免 通过传递u'\xe4\xe8\xdf'
来解决问题:这样做的问题(很明显)是你必须考虑 输出十六进制码位值。
或者,可以指定unicode名称:
相关问题 更多 >
编程相关推荐