我对来自外部源的字符串有编码问题。 这个源发送编码给我的字符串,只有当它们是脚本代码的一部分时我才能解码它们。 我在这里查看了几个主题甚至一些推荐的教程(例如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
感谢您的帮助,如果您需要更多信息,请与我们联系。 谢谢!
答案 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")
请注意,这可能是生成数据的编码错误。因此,它可能包含您无法使用此方法修复的其他错误。