我有一个未指定类型的字符串对象。它将匹配types.StringTypes,但可以是type.StringType或type.UnicodeType - 我不确定我会收到什么。我无法控制进来的内容。
当我在字符串类型中有非ascii字符并将调用传递给misaka(这是一个日落解析器)时,我的问题就出现了。
在这个例子中,我们正在处理unichr(8250)/ u'\ u203a',这在我的错误日志中引起了这么多次......
a = "›"
b = u"›"
print type(a) # <type 'str'>
print type(b) # <type 'unicode'>
print a # fine
print b # fine
import misaka
markdown_renderer = misaka.HtmlRenderer()
renderer = misaka.Markdown( markdown_renderer )
try:
print renderer.render( a )
#this will fail
print "GOOD a"
except:
print "FAILED a"
try:
print renderer.render( b )
#this will pass
print "GOOD b"
except:
print "FAILED b"
我无法弄清楚如何将“a”对象变成misaka不会有问题的东西。 'b'总能奏效。任何人都可以提出建议吗?
答案 0 :(得分:2)
如果str
总是失败但是unicode
总是成功,那么你可能需要在传递它之前解码你的str
对象。诀窍是知道编码:如果你这样做,你可以做(例如)a.decode('utf-8')
。但是如果你不知道,那么我理解chardet包有合理的猜测作用:但请注意猜测是你所能做的。