繁体   English   中英

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

[英]Stringifying an Inline::Python::Object-encoded Unicode string

Inline :: Python :: Object使用以下方法重载'""' (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->encode('utf8')替换$self->__str__() $self->encode('utf8') 我不太喜欢修改这样的模块,并且对它进行子类化似乎是一个相当大的挑战。 而且,我不能100%确定为什么我的修复工作正常,这有点令人担忧。

我很确定我不是第一个需要在Perl中使用Python Unicode字符串的人。 应该怎么做?

似乎有效的一种解决方法是用$ self-> encode('utf8')替换$ self-> str ()。

这是处理此问题的正确方法。 该代码将编码任何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解码器来正确显示该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM