如何处理编码不清楚的字符串

时间:2015-06-26 11:37:42

标签: python character-encoding jython utf

我知道网络和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中,它将它们变成白色方块。

1 个答案:

答案 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

没有看到任何实际的错误输出,这是我可以提供帮助的程度。