2011-11-21 21 views
2

在進行re.search之後,我無法保存特殊字符,例如θæŋ。蟒蛇,我無法保存特殊字符,如重新搜索後的θæŋ

我正在保存到Django模型文本框。在管理頁面,而不是θæŋkfəli,我越來越

\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li 

是re.search的錯誤嗎? 是Admin的錯誤嗎? 我是否錯誤地儲蓄?

如何搜索字符串中需要的部分並將其保存在模型的文本字段中,並帶有'θæŋ'字符?

lines='title="Listen to audio" /></a><span class="pr">/<span class="unicode">ˈ</span>θæŋkfəli/</span> <span class="fl">adverb' #the string which i wan to save exactly as it is, Django saves it correctly 

liness=smart_str(lines, encoding='utf-8', strings_only=False, errors='replace') # saves correctly 
linesu=smart_unicode(lines, encoding='utf-8', strings_only=False, errors='replace') # saves correctly 

嘗試查找字符串的一部分之後θæŋkfəliDjango不會將其保存爲需要的特殊字符。相反θæŋkfəli的,我得到 「\ XCE \ XB8 \ XC3 \ xa6 \ XC5 \ x8bkf \ xc9 \ x99li」

stryc=re.compile('<span\s*class=\"pr\">\s*/\s*<span\s*class="unicode\">(?P<Pronun>.*)<span\s*class=\"fl\">', re.DOTALL) 
        #\s+/\s+<span class=\"unicode\">\s+[\\a-zA-Z0-9\s]+/\s+</span> ' 
strys=re.search(stryc, linesu) 

Pronun=stryWordcs.groups('Pronun') 
text=Pronun.encode('utf-8') # does not covert unicode to letters 
Pronun=smart_str(Pronun, encoding='utf-8', strings_only=False, errors='replace') # also does not covert unicode to letters 
a=Pronunciation(field=Pronun) # or field=text 
a.save() 
# Pronun= "θæŋkfəli", nevertheless it is saved as \xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li or in unicode 

如果我不使用smart_str,我得到「\ u03b8 \ XE6 \ u014bkf \ u0259li」

,如果我嘗試在線路或liness搜索我不能夠找到θæŋkfəli由於特殊字符(小木棍在上面= \ XCB \ X88 = \ u02c8)

問候, 金塔爾

回答

1

當您看到"\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li時,您所看到的實際上與θ相同æŋkfəli,但採用十六進制表示法。同樣,你可以代表相同的字符集爲

U+03B8 U+00E6 U+014BkfU+0259li

這是因爲文本存儲爲unicode字符串。要看到這實際上是相同的,請嘗試將您的文本(使用特殊字符)複製到this conversion website的頂部框中並進行轉換。 Python能夠handle unicode,但取決於你使用什麼來顯示它將出現不同的角色。

我不完全確定你的問題是什麼。如果您擔心自己的正則表達式能夠準確匹配unicode字符,python的re模塊可以選擇make it work differently with unicode

如果您擔心如何顯示此文本,這將根據您嘗試顯示的方式而有所不同,您需要更具體地瞭解您的問題。

但我可以向你保證,Django正在存儲你的字符串。