【发布时间】:2016-04-12 11:07:57
【问题描述】:
我从外部来源获得的字符串存在编码问题。 此源将编码的字符串发送给我,只有当它们是脚本代码的一部分时,我才能对其进行解码。 我在这里查看了几个线程,甚至查看了一些推荐的教程(例如 this 之一),但都没有找到。
例如,如果我运行这个:
python -c 'print "gro\303\237e"'
我明白了:
große
哪个是正确的结果。
但如果我在脚本中使用它,例如:
import sys
print sys.argv[1]
并称它为test.py "gro\303\237e",我明白了:
gro\303\237e
我打算将正确的字符串写入系统日志,但我似乎无法让它工作。
我系统上的一些数据: - Python 2.7.10 - CentOS Linux - LANG=en_US.UTF-8 - LC_CTYPE=UTF-8
我将不胜感激,如果您需要更多信息,请告诉我。 谢谢!
【问题讨论】:
-
只需使用
test.py "große"调用您的脚本。 -
我会,但我不控制输入字符串。它已经编码到达。谢谢。
-
\xxx在 string literal 中被解释为转义序列,但 only 在字符串文字中。 – 不仅如此,\303\237作为“ß”的转义序列相当...不寻常。似乎该字符串的编码出错了。如果您以相同的方式解码它(不)正确,您可以获得正确的结果,但是应该是什么样的转义,您可以从源头纠正它吗? -
你可以通过this SO answer取消转义(而不是解码,虽然它有点像)
-
看起来转义序列代表原始字节,将这些字节解释为 UTF-8 会产生所需的结果。
标签: python string encoding utf-8