2017-04-08 73 views
0

顯示Unicode字符我有一些字符串我的,我不能在我的網站上正確顯示unicode字符數據庫。然而它在一個有趣的情況下正常工作。不能與瓶

所以它的工作原理,當我這樣做:

@app.route('/') 
def main(): 
    return render_template('home.html', text = '\u00e9ps\u00e9g') 
# displays: épség 

但是當我做這個(查詢數據庫,並通過從結果字符串),這是行不通的:當我

@app.route('/') 
def main(): 
    text_string = getText() 
    return render_template('home.html', text = text_string) 
# displays: \u00e9ps\u00e9g 

然而使用完全相同的字符串,我從第二個版本中獲得第一個解決方案,它完美地工作。

我會很感激,如果有人能告訴我爲什麼工作的第一個解決方案,爲什麼沒有第二個。這兩個字符串應該是相同的,但是當我從服務器獲取它時,它保持不變,當我顯示它。當我手動添加它時,它又很好。但不幸的是,我有數百個字符串,所以我需要使用第二個字符串。

+1

您可以檢查'型( '\ u00e9ps \ u00e9g')'和'型(text_string的)'? –

+0

你能提供你的getText()方法的代碼嗎? –

+0

@NilsWerner我得到了。 – rihe

回答

1

你在一個案例中有什麼是unicode轉義序列,代表一個單一的Unicode字符。在另一種情況下,你有文字字符\,你,代表六個字符。這可以使用原始字符串,它忽略Unicode轉義序列來說明:

>>> text = '\u00e9ps\u00e9g' 
>>> print(text) 
épség 
>>> text = r'\u00e9ps\u00e9g' 
>>> print(text) 
\u00e9ps\u00e9g 

Unicode字符串轉換與字面轉義序列,首先你需要一個字節串,然後用unicode_escape編解碼器進行解碼。爲了獲得一個Unicode字符串與非ASCII字符文字轉義代碼的字節串,與ascii編解碼器編碼:

>>> text = r'\u00e9ps\u00e9g' 
>>> print(text) 
\u00e9ps\u00e9g 
>>> print(text.encode('ascii').decode('unicode_escape')) 
épség 

從您的評論,你可能有從JSON數據文件中的文本。如果它是正確的JSON,則應解碼它:

>>> s = r'"\u00e9ps\u00e9g \ud83c\udf0f"' 
>>> print(s) 
"\u00e9ps\u00e9g \ud83c\udf0f" 
>>> print(json.loads(s)) 
épség 

請注意引用JSON字符串。沒有雙引號就不會解碼。

+0

謝謝你馬克!它的工作幾乎完美。然而,像'\ ud83c \ udf0f'這樣的一些emojis,我得到一個錯誤'utf-8'編解碼器不能在位置4851編碼字符'\ ud83c':代理不允許'。你有什麼想法可以導致這種情況嗎?這些是完整的「表情符號」,我不明白他們有什麼問題。 – rihe

+0

@rihe文本的來源可以是一個JSON數據文件。 JSON將U + FFFF上方的Unicode字符編碼爲UTF-16代理對。我會添加一個例子。 –

+0

是的,這是JSON,我也忘記了雙引號,但現在它完全完美!令人驚歎的答案! – rihe