2012-05-23 81 views
8

我試圖寫出一個平面文件的一些中文,俄文或各種非英文字符集用於測試目的。我遇到了如何將Unicode十六進制或十進制值輸出到其相應字符的問題。Python unicode codepoint unicode character

例如在Python中,如果您有像абвгдежзийкл這樣的硬編碼字符集,您將分配value = u"абвгдежзийкл"並且沒有問題。

但是,如果你有一個十進制或十六進制小數像1081/0439存儲在一個變量,你想打印出來與它的相應的實際字符(而不只是輸出0x439),這將如何完成?上面的Unicode十進制/十六進制值是指й

+0

你可能想修改你的標題 題。它提到了UTF-8,但這個問題與UTF-8無關。 – NPE

+2

你經常提到的「十進制或十六進制」使你認爲你不知道「十進制或十六進制」只是表示問題而不是該值本身的屬性。 – glglgl

回答

17

使用unichr()(Python的2)或chr()(Python 3中):

In [4]: print(unichr(1081)) 
Out[4]: й 
+0

感謝您的回答,儘管這不是我正在尋找的,因爲我已經知道如何處理硬編碼條目。我想知道如何處理標準輸出變量中的十進制或十六進制unicode值,或輸出到文件。 – stoneferry

+0

@stoneferry:只需將「1081」更改爲包含字符代碼的變量名稱即可。 – NPE

+0

如果我有一個只包含整數'1081'的變量,我將如何使用print命令輸出字符而不是'1081'。 – stoneferry

1

所以,這個問題的答案是:

  1. 轉換爲十六進制值與int(hex_value, 16)
  2. 然後轉換爲十進制通過chr()獲得相應的條件。

綜上所述:

>>> print(chr(int('0x897F', 16))) 
西 
0

如果遇到錯誤:

ValueError: unichr() arg not in range(0x10000) (narrow Python build)

雖然試圖用unichr您的十六進制值轉換,你可以做的事情得到解決的錯誤像:

>>> n = int('0001f600', 16) 
>>> s = '\\U{:0>8X}'.format(n) 
>>> s 
'\\U0001F600' 
>>> binary = s.decode('unicode-escape') 
>>> print(binary)