2011-05-17 44 views
2

我使用Django 1.3。 你会如此善良,回答我一个问题。 我从我的数据库中,编码设置为untf8 Unicode的Django的解码UTF字符 - \ u0411 \ u0435 \ u0441 \ u0435 \ u0434 \ \ u043a u0430 - 以cyrilic串

settings.py 
DEFAULT_CHARSET = 'utf-8' 

file.py 
# -*- coding: utf-8 -*- 
def get_gift(gift_id): 
    gift = Gift.objects.get(id__exact = gift_id, is_visible = True) 
    return gift 

def output(): 
    gift = get_gift(gift_id) 
    title = gift.name.encode('utf-8') 
    return HttpResponse(title) 

对此我越来越\ u0411 \ u0435 \ u0441 \ u0435 \ u0434 \ u043a \ u0430读取数据,但它应该是在俄罗斯(cyrilic)

我怎样才能解决这个问题?

+0

你怎么样删除这个多余的'gift.name.encode( 'UTF-8')'? – 2011-05-17 09:08:08

+0

我已删除编码(“UTF-8”),并有一个成功,如果我有一个代码 - 返回的HttpResponse(名称)。因此,这意味着json.dumps(名称),其转换为恐怖... – Roman 2011-05-17 09:15:36

+1

感谢大家。我找到了一个解决方案 - 返回HttpResponse(json.dumps(info).decode('raw-unicode-escape')。encode('utf-8')) – Roman 2011-05-17 09:18:45

回答

0

经常发生在你有Unicode的非罗马文字数据,但你不能显示它 - 通常是因为你想展示给通过应用程序的用户,不支持Unicode,或因为你需要的字体是不可访问的。您可以将Unicode字符表示为“???????”或“\ 15BA \ 15A0 \ 1610 ...”,但对于真正想要阅读文字内容的用户而言,这几乎是无用的。

Unidecode提供的是一个函数'unidecode(...)',它取出Unicode数据并尝试用ASCII码表示它(即可在0x00和0x7F之间显示的通用字符)。

该表示几乎总是尝试在音译 - 即,用罗马字母表示由某些其他书写系统中的文本表达的发音。 (见上面的例子)

More information here

尝试pip install Unidecode