字符串化Inline :: Python :: Object编码的Unicode字符串

时间:2014-03-12 12:56:42

标签: python perl unicode

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字符串的人。这应该怎么做?

1 个答案:

答案 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解码器来正确显示该值。