QString: проблема кодирования-декодирования Unicode - PullRequest
5 голосов
/ 29 июня 2011

Я пытаюсь сделать простое преобразование в строку Unicode в стандартную строку, но безуспешно.

У меня есть: PyQt4.QtCore.QString(u'\xc5\x9f')

Я хочу: '\xc5\x9f' Обратите внимание, что str типа нетUnicode, потому что библиотека, которую я использую, не принимает Unicode.

Вот то, что я пытался, вы можете увидеть, насколько я безнадежен :):

>>> s = QtCore.QString(u'\xc5\x9f')
>>> str(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) '
>>> s.toUtf8()
PyQt4.QtCore.QByteArray('\xc3\x85\xc2\x9f')
>>> s.toUtf8().decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'QByteArray' object has no attribute 'decode'
>>> str(s.toUtf8()).decode("utf-8")
u'\xc5\x9f'
>>> str(str(s.toUtf8()).decode("utf-8"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

Я знаю, что есть многовопросов, связанных с Unicode, но я не могу найти этот ответ.

Что мне делать?

Редактировать:

Я нашел хакерский способ:

>>> unicoded = str(s.toUtf8()).decode("utf-8")
>>> unicoded
u'\xc5\x9f'
>>> eval(repr(unicoded)[1:])
'\xc5\x9f'

Знаете ли вы лучший способ?

Ответы [ 2 ]

8 голосов
/ 05 октября 2013

Если у вас есть строка Unicode типа данных QString, и вам нужно преобразовать ее в строку Python, вы просто:

unicode(YOUR_QSTRING_STRING)
4 голосов
/ 29 июня 2011

Это то, что вы ищете?

In [23]: a
Out[23]: u'\xc5\x9f'

In [24]: a.encode('latin-1')
Out[24]: '\xc5\x9f'

In [25]: type(a.encode('latin-1'))
Out[25]: <type 'str'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...