如何使 __repr__ 返回 unicode 字符串

发布于 2025-01-06 08:13:00 字数 389 浏览 0 评论 0原文

我在对象 x 上调用 __repr__() 函数,如下所示:

val = x.__repr__()

然后我想存储 val 字符串到 SQLite 数据库。问题是 val 应该是 unicode。

我尝试了这个但没有成功:

val = x.__repr__().encode("utf-8")

val = unicode(x.__repr__())

你知道吗?知道如何纠正这个问题吗?

我正在使用Python 2.7.2

I call a __repr__() function on object x as follows:

val = x.__repr__()

and then I want to store val string to SQLite database. The problem is
that val should be unicode.

I tried this with no success:

val = x.__repr__().encode("utf-8")

and

val = unicode(x.__repr__())

Do you know how to correct this?

I'm using Python 2.7.2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

抹茶夏天i‖ 2025-01-13 08:13:00

对象的表示不应该是 Unicode。定义 __unicode__ 方法并将对象传递给 unicode()

The representation of an object should not be Unicode. Define the __unicode__ method and pass the object to unicode().

帅冕 2025-01-13 08:13:00

repr(x).decode("utf-8")unicode(repr(x), "utf-8") 应该可以工作。

repr(x).decode("utf-8") and unicode(repr(x), "utf-8") should work.

若水微香 2025-01-13 08:13:00

我遇到了类似的问题,因为我使用 repr 从列表中提取文本。

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = repr(b[0])
c = unicode(a, "utf-8")
print c

>>> 
'text\xe2\x84\xa2'

我终于尝试加入以将文本从列表中取出

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(a, "utf-8")
print c

>>> 
text™

现在它可以工作了!!!

我尝试了几种不同的方法。每次我将 repr 与 unicode 函数一起使用时,它都不起作用。我必须使用 join 或声明文本,如下面的变量 e 所示。

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(repr(a), "utf-8")
d = repr(a).decode("utf-8")
e = "text\xe2\x84\xa2"
f = unicode(e, "utf-8")
g = unicode(repr(e), "utf-8")
h = repr(e).decode("utf-8")
i = unicode(a, "utf-8")
j = unicode(''.join(e), "utf-8")
print c
print d
print e
print f
print g
print h
print i
print j

*** Remote Interpreter Reinitialized  ***
>>> 
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
textâ„¢
text™
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
text™
text™
>>> 

希望这有帮助。

I was having a similar problem, because I was pulling the text out of a list using repr.

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = repr(b[0])
c = unicode(a, "utf-8")
print c

>>> 
'text\xe2\x84\xa2'

I finally tried join to get the text out of the list instead

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(a, "utf-8")
print c

>>> 
text™

Now it works!!!!

I tried several different ways. Each time I used repr with the unicode function it did not work. I have to use join or declare the text like in variable e below.

b =['text\xe2\x84\xa2', 'text2']  ## \xe2\x84\xa2 is the TM symbol
a = ''.join(b[0])
c = unicode(repr(a), "utf-8")
d = repr(a).decode("utf-8")
e = "text\xe2\x84\xa2"
f = unicode(e, "utf-8")
g = unicode(repr(e), "utf-8")
h = repr(e).decode("utf-8")
i = unicode(a, "utf-8")
j = unicode(''.join(e), "utf-8")
print c
print d
print e
print f
print g
print h
print i
print j

*** Remote Interpreter Reinitialized  ***
>>> 
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
textâ„¢
text™
'text\xe2\x84\xa2'
'text\xe2\x84\xa2'
text™
text™
>>> 

Hope this helps.

时间海 2025-01-13 08:13:00

在Python2中,可以定义两个方法:

#!/usr/bin/env python
# coding: utf-8

class Person(object):

    def __init__(self, name):

        self.name = name

    def __unicode__(self):
        return u"Person info <name={0}>".format(self.name)

    def __repr__(self):
        return self.__unicode__().encode('utf-8')


if __name__ == '__main__':
    A = Person(u"皮特")
    print A

在Python3中,只需定义__repr__即可:

#!/usr/bin/env python
# coding: utf-8

class Person(object):

    def __init__(self, name):

        self.name = name

    def __repr__(self):
        return u"Person info <name={0}>".format(self.name)


if __name__ == '__main__':
    A = Person(u"皮特")
    print(A)

In Python2, you can define two methods:

#!/usr/bin/env python
# coding: utf-8

class Person(object):

    def __init__(self, name):

        self.name = name

    def __unicode__(self):
        return u"Person info <name={0}>".format(self.name)

    def __repr__(self):
        return self.__unicode__().encode('utf-8')


if __name__ == '__main__':
    A = Person(u"皮特")
    print A

In Python3, just define __repr__ will be ok:

#!/usr/bin/env python
# coding: utf-8

class Person(object):

    def __init__(self, name):

        self.name = name

    def __repr__(self):
        return u"Person info <name={0}>".format(self.name)


if __name__ == '__main__':
    A = Person(u"皮特")
    print(A)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文