Данные Django ORM и Unicode - PullRequest
       26

Данные Django ORM и Unicode

2 голосов
/ 17 февраля 2010

Я использую следующую модель для хранения информации о страницах:

class Page(models.Model):
    title = models.TextField(blank = False, null = False)

Новые данные сохраняются правильно, я сохраняю данные Unicode там (много не-ASCII заголовков). Но когда я выполняю запрос:

page = Page.objects.filter(id = 1)

page.title выглядит странно:

u'\u042e\u0449\u0435\u043d\u043a\u043e'

Что я мог сделать не так? Благодарю.

Обновление : Действительно, когда я печатаю page.title - все выглядит нормально. Но мне нужно сбросить его в JSON, поэтому после такого кода:

dumps({'title': page.title})

Все выглядит плохо.

Обновление 2 : Спасибо всем, указали мне, что это поведение правильно. Но уникодовые экраны так длинны. Можно ли как-нибудь перевести их в utf-8?

Ответы [ 5 ]

3 голосов
/ 17 февраля 2010

Вы не делаете ничего плохого. Вы пытались распечатать (или вывести на веб-странице)?

In [1]: l = u'\u042e\u0449\u0435\u043d\u043a\u043e'

In [2]: print l
Ющенко
2 голосов
/ 17 февраля 2010

Это прекрасно. Это "Ющенко", спасённый юникодом.

1 голос
/ 17 февраля 2010

Это правильное поведение: dumps кодирует JSON для вас.Сейчас это выглядит ужасно, но это только для передачи.Чтобы увидеть вашу строку Unicode снова, нужно декодировать ее (обычно на другом конце):

>>> from django.utils.simplejson import dumps, loads
>>> original = u'\u042e\u0449\u0435\u043d\u043a\u043e'
>>> print original
Ющенко
>>> encoded = dumps(original)
>>> print encoded
"\u042e\u0449\u0435\u043d\u043a\u043e"
>>> decoded = loads(encoded)
>>> print decoded
Ющенко

Обычно вам не нужно декодировать ее в Python, она будет загружена как строка Unicode в JavaScript.

1 голос
/ 17 февраля 2010

С тем, что вы опубликовали, проблем нет.

>>> print json.dumps(u'\u042e\u0449\u0435\u043d\u043a\u043e')
"\u042e\u0449\u0435\u043d\u043a\u043e"

Какой правильный строковый литерал JavaScript. Присвойте это переменной, и вы получите Ющенко в строке JavaScript.

В чем проблема? Что «плохо выглядит»?

1 голос
/ 17 февраля 2010

Может быть, ваша оболочка не может отображать символы Юникода, может быть?

Что произойдет, если вы сделаете print page.title?

...