如果字符串没有硬编码,则脚本中的Python编码问题

时间:2016-04-12 11:07:57

标签: python string encoding utf-8

我对来自外部源的字符串有编码问题。 这个源发送编码给我的字符串,只有当它们是脚本代码的一部分时我才能解码它们。 我在这里查看了几个主题甚至一些推荐的教程(例如this一个),但是空白了。

例如,如果我运行它:

python -c 'print "gro\303\237e"'

我明白了:

große

哪个是正确的结果。

但如果我在脚本中使用它,例如:

import sys
print sys.argv[1]

并将其称为test.py "gro\303\237e",我得到:

gro\303\237e

我打算将正确的字符串写入syslog,但我似乎无法使其工作。

我系统上的一些数据:   - Python 2.7.10   - CentOS Linux   - LANG = en_US.UTF-8   - LC_CTYPE = UTF-8

感谢您的帮助,如果您需要更多信息,请与我们联系。 谢谢!

2 个答案:

答案 0 :(得分:0)

这将有效:

import sys
import ast
print ast.literal_eval('b"%s"' % sys.argv[1]).decode("utf-8")

但请首先阅读literal_eval以确保它符合您的需求(我认为它应该是安全的,但您应该阅读并确保)。

答案 1 :(得分:0)

如果你真的有gro\303\237e字符"gro\303\237e"(第一个是字符串\ 3 0 3 \ 2 3 7,第二个字符是charsgroße )您可以按照this SO answer

中的说明使用decode("escape_string")

请注意,这可能是生成数据的编码错误。因此,它可能包含您无法使用此方法修复的其他错误。