2017-03-27 132 views
0

我得到了一個整數值29.827,我想用UTF-16-LE編碼將它轉換成Unicode漢字'玻璃'(U + 7483)(見http://www.fileformat.info/info/unicode/char/7483/index.htm)。Python:將整數轉換爲UTF16-LE

我設法這個數字轉換成3byte UTF-8編碼(超過2048整數有UTF-8 3byte ..)與

s ='\u%s'%hex(int_to_encode)[2:] 
file.write(s.decode('unicode-escape').encode('utf-8')) 
file.close() 

但我想通了所需要的編碼是UTF- 16-LE。 在預期的編碼,整數表示也有3個字節(這就是爲什麼我認爲我的第一次嘗試是正確的,也是3個字節有一個整數...)

非常感謝您的幫助,

親切的問候

+0

您正在使用哪個Python版本? Python 3中的Unicode處理與Python 2中的處理相當不同(並且更好)。 –

+0

@PM 2Ring:由於遺留代碼仍在使用2.7 ... –

回答

2

首先將數字轉換爲字符使用chr()(Python3)或unichr()(Python2)。然後使用UTF-16-LE進行編碼,您只需指定該編碼,而不是指定UTF-8。

所以Python 2:

int_to_encode = 0x7483 
s = unichr(int_to_encode) 
file.write(s.encode('utf-16-le')) 
file.close() 

在任何的Python 2或Python 3,當你打開它,你可以指定文件編碼:

import io 
s = unichr(0x7483) 
with io.open('foo', 'w', encoding='utf-16-le') as f: 
    f.write(s) 

控制檯會話顯示此:

>>> with io.open('foo', 'w', encoding='utf-16-le') as f: 
...  f.write(unichr(0x7483)) 
... 
1L 
>>> with io.open('foo', 'r', encoding='utf-16-le') as f: 
...  print(f.read()) 
... 
璃 
+0

:感謝您的快速回答。但是,當我將字符寫入文件並使用編輯器打開它時,它會顯示「Coding CP1252」。它被打開爲「ƒt」 –

+0

但在寫入文件和打印之前\t「int_to_encode = 0x7483; s = unichr(int_to_encode); print s」字符顯示正確 –

+0

似乎file.write(s.encode(' utf-16-le'))不能正確地編碼字符...... –