3 回答
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
我得到了這個(gè)字典:
task_formatted.append(str(item['entity']))
我將其轉(zhuǎn)換為 a str,然后將其附加到列表中,以便我可以輕松地將其傳遞給我的模板
這段代碼并沒(méi)有像你想象的那樣做。
>>> entity = {'type': 'Asset', 'id': 1404, 'name': 'Test-Asset commé'}
>>> str(entity)
"{'type': 'Asset', 'id': 1404, 'name': 'Test-Asset comm\\xc3\\xa9'}"
當(dāng)你調(diào)用str字典(或列表)時(shí),你不會(huì)得到調(diào)用str字典的每個(gè)鍵和值的結(jié)果:你得到每個(gè)鍵和值的代表。在這種情況下,這意味著“Test-Asset commé”已以難以逆轉(zhuǎn)的方式轉(zhuǎn)換為“Test-Asset comm\xc3\xa9”。
>>> str(entity).decode('utf-8') # <- this doesn't work.
u"{'type': 'Asset', 'id': 1404, 'name': 'Test-Asset comm\\xc3\\xa9'}"
如果您想僅{{ item }}使用模板在模板中呈現(xiàn)您的字典,您可以使用 json 模塊來(lái)序列化它們而不是str. 請(qǐng)注意,您需要將 json(類型為str)轉(zhuǎn)換為unicode實(shí)例,以避免UnicodeDecodeError在呈現(xiàn)模板時(shí)出現(xiàn) 。
>>> import json
>>> template = jinja2.Template(u"""<td>{{item}}</td>""")
>>> j = json.dumps(d, ensure_ascii=False)
>>> uj = unicode(j, 'utf-8')
>>> print template.render(item=uj)
<td>{"type": "Asset", "id": 1404, "name": "Test-Asset commé"}</td>
一些一般性觀察/要點(diǎn):
不要使用str(或unicode) 來(lái)序列化字典或列表等容器;使用json或pickle等工具。
確保您傳遞給 jinja2 的任何字符串文字都是 的實(shí)例unicode,而不是str
使用 Python2 時(shí),如果您的代碼有可能處理非 ascii 值,請(qǐng)始終使用unicode,切勿使用str。
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
你做錯(cuò)了。
<td>{{item[0].decode('utf-8')}}</td>你為什么添加decode?這是錯(cuò)誤的。我建議您不要放置任何轉(zhuǎn)換功能。UTF-8 可以正常工作(我認(rèn)為這是默認(rèn)設(shè)置)。在任何情況下,您都沒(méi)有解碼. 您正在將字符串編碼為 UTF-8(“編碼”:您使用代碼 UTF-8,“解碼”:從特定的編碼值到語(yǔ)義值:實(shí)際上在 python 中,您不應(yīng)該關(guān)心字符串在內(nèi)部如何編碼 [BTW 一種內(nèi)部編碼,一種 UTF-8、latin1、UTF-16 或 UTF-32,根據(jù)對(duì)整個(gè)字符串進(jìn)行編碼的最有效方法])。
只需刪除decode('utf-8'). 在python代碼上,你不應(yīng)該關(guān)心編碼和解碼,而應(yīng)該關(guān)心輸入和輸出:使用三明治規(guī)則。這將極大地簡(jiǎn)化字符串、邏輯的處理,并避免大多數(shù)錯(cuò)誤
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
我找到了解決我的問(wèn)題的方法:
unicodedata.normalize('NFKD', unicode(str(item['entity']['type']) + str(item['entity']['name']),'utf-8'))首先,我用 str() 將我的 dict 轉(zhuǎn)換為一個(gè)字符串,然后在導(dǎo)入 unicodedata 后我用 unicode('str' , 'utf-8') end finaly 將它轉(zhuǎn)換為 UTF-8 Unicode 我使用 unicodedata.normalize()
希望它會(huì)幫助人們
添加回答
舉報(bào)
