2011-06-09 15 views
4

我有一個字典(鍵,值)對。關鍵是'ASCII'(例如'hello'), 該值不是英文(例如中文輸入曲目)。Unicode字典中給出十六進制輸出

某些代碼:

t_t = {} 
    s_0 = 'hello' 
    s_v = '輸入曲目' 
    print s_v  # gives the Chinese 輸入曲目 
    t_t[s_0] = s_v 

    print t_t.values() 

輸出是十六進制(例如 '\ X39 \ XEF')

即使在代碼訪問值:

ss = t_t['hello'] 
print ss 

給我十六進制。

因爲我使用這個作爲翻譯,我真的需要unicode。

通過在Windows 7上的Python版本一「DOS」控制檯窗口運行,這是2.7.1

+1

帶'.values()'的輸出是預期的並且需要。但是第一個和最後一個不應該有區別。你確定只存儲了字符串,而不是列表包裝字符串? – delnan 2011-06-09 17:59:22

回答

7

您需要手動行走值。該打印將它轉換爲十六進制,因爲您要求它打印整個元組,打印將您的字符串視爲任意二進制數據。爲了不會完全搞亂一些人的終端,它將可能不可打印的字符編碼爲十六進制。該字符串的內容不受影響 - 它只是您如何顯示它的產品。

作爲一個例子:

for v in t_t.values(): 
    print v 

這應該打印的預期值。

您還應該考慮使用Python 3或Unicode字符串(u「Unicode字符串」)。你現在擁有的是不可移植的,並且取決於你的系統編碼。

+1

+1 ...非常豐富。 – motoku 2011-06-09 18:59:12

+1

這不是真的關於「不搞亂終端」,它是關於'repr()'只打印可打印的ASCII字符,所以你可以看到什麼東西實際包含,而不是它打印的東西。 – 2011-06-09 20:43:11

+0

你是對的。具體而言,兩個Unicode字符序列可以在由不同序列組成的情況下打印爲相同的東西。除此之外,根據終端仿真器的不同,顯示器可能處於一種奇怪的狀態,因此不發送控制序列(在C0或C1塊中)具有實際價值。如果不知道一個字符串是一個Unicode字符串,它確實只是任意的二進制數據。當你有系統編碼的字符串和任意的二進制數據時,repr()的行爲早於Python中的Unicode字符串,並且無法將兩者區分開來。 – yam655 2011-06-10 10:34:41

相關問題