Inline::Python ::对象重载'""'
(stringify):
sub __inline_str__ {
my ($self) = @_;
return Inline::Python::py_has_attr($self, '__str__') ? $self->__str__() : $self;
}
__str__()
方法尝试转换为ASCII,这意味着如果Inline::Python::Object
对象表示Python Unicode字符串,则可能的结果是:
exceptions.UnicodeEncodeError:'ascii'编解码器无法对位置6中的字符u'\ xe7'进行编码:序号不在第1252行的范围内(128)
似乎有效的一种解决方法是将$self->__str__()
替换为$self->encode('utf8')
。我不太喜欢修改这样的模块,并且对它进行子类化似乎是一个相当大的挑战。而且,我不能100%确定为什么我的修复工作正常,这有点令人担忧。
我很确定我不是第一个需要在Perl中使用Python Unicode字符串的人。这应该怎么做?
答案 0 :(得分:-1)
似乎有效的一种解决方法是替换$ self-> str () 使用$ self-> encode('utf8')。
这是处理此问题的正确方法。该代码将对任何UTF字符进行编码,如下所示:
>>> u'\ufdef'.__str__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufdef' in position 0: ordinal not in range(128)
>>> u'\ufdef'.encode('utf-8')
'\xef\xb7\xaf'
然后,您可能希望在PERL中使用UTF-8解码器来正确显示该值。