我知道网络和stackoverflow关于Python和字符编码的内容非常多,但我还没有真正找到我想要的答案。因此,冒着创建副本的风险,无论如何我都要问。
它是一个获取字典的脚本,其中所有键都是unicode。值是具有未知编码的字符串。对于按键而言,它并不重要,键非常简单,与值不同。值可以(并且确实)包含各种各样的编码。有一些词典,其中一些值在ASCII中,其他值为UTF-16BE,其他值为cp1250。
这完全混淆了进一步的处理,目前主要包括打印或连接(是的,那么简单)。
我想出的解决方法是使Python打印语句正常工作:
for key in data.keys():
# hope they did not chose a funky encoding
try:
print key+":"+data[key] # this triggers a UnicodeDecodeError on many encodings
current_data = data[key]
except UnicodeDecodeError:
# trying to cope with a funky encoding
current_data = data[key].decode(chardet.detect(data[key])['encoding']) # doing this on each value, because the dictionary sometimes contains multiple encodings
print key+":", # printing without newline was a workaround, because connecting didn't work
print current_data.encode('UTF-8')
在Python中,这很好用。在我在项目中使用的Jython 2.7rc1(不是切换选项),它打印的字符肯定不是原始编码(看起来很时髦的字符)。如果有人知道我怎么能在Jython中使这个也很棒!
编辑(示例): 采样值:
Our latest scenarios explore two possible versions of the future seen through fresh “lenses”.
创建一个字符串,其中左右双引号变为\ x8D和\ x8E。我不知道编码是什么。在使用上面的代码后,它在Python中删除它们。在Jython中,它将它们变成白色方块。
答案 0 :(得分:1)
我不熟悉Jython,但我发现以下链接可能有用:http://python.6.x6.nabble.com/character-encoding-issues-td1766833.html
它表示你应该将所有unicode字符串保存在单独的文件中,并使用codecs.open读取它们。这似乎适用于遇到与您类似的问题的人。
以下链接还提到了有关为JVM指定编码参数的内容:https://answers.launchpad.net/sikuli/+question/156443
没有看到任何实际的错误输出,这是我可以提供帮助的程度。