2016-12-03 79 views
0

我讀過一堆關於ord和chr的文章,但到目前爲止我被卡住了。 我需要的是能夠做到以下幾點:Python:如何使用字符值和代碼點

我的代碼點的字節數組從而範圍在0-255 對於他們每個人我想相關的UTF-8字符 然後我需要連接這些字符並將結果字符串用作字節數組,而不是它們的代碼點數組!

我試圖看到字符串作爲iso-8859-1編碼的bytearray,但迄今爲止,沒有運氣。 任何幫助表示讚賞!

當前代碼:

import sys 
reload(sys) 
msg = '' 
sys.setdefaultencoding('iso-8859-1') 
for m in bytearray(input, 'iso-8859-1', ''): 
    msg += unichr(m) 
msg = bytearray(msg, 'iso-8859-1') 
+0

解碼爲「iso-8859-1」並編碼爲「utf-8」有什麼問題? –

+0

其實我的'輸入'是一個字節數組。我也想要一個bytearray。你能告訴我一些示例代碼嗎?我無法準確理解你的意思,抱歉 – Ottunger

回答

-1

對於那些想知道的人,我經過更多挖掘後自己找到了解決方案,但是如果您知道其中一個,我會採取更多以python爲導向的方式!

import sys 
reload(sys) 
sys.setdefaultencoding('iso-8859-1') 
mm = bytearray(input) 
msg = bytearray() 
for m in mm: 
    val = bytearray(unichr(m), 'utf-8') 
    for v in val: 
     msg.append(v) 
# revert if required 
# sys.setdefaultencoding('ascii') 
+0

正如我寫的 - 我是uselees和傾向於讓你奇怪的錯誤,試圖改變默認編碼。另外,不需要將字符串轉換爲字節數組並運行「for」表達式來對字符進行編碼/解碼。 – jsbueno

0

無需撥弄「defautlencoding」 - 剛剛離開它,因爲它是 - 你有你的數據和編碼您want.The Python解釋器都有它的默認值 - 即與OS終端的接口,等等。

因此,假設你有一個名爲input與ISO-8859-1(latin1的)encodning字節組,您要對應的UTF-8編碼的文本,僅僅指剛做:

result = bytearray(bytes(input).decode("iso-8859-1").encode("utf-8")) 

的輸出「編碼」方法本身就是一個「字節」對象 - 字節和字節數組對象可以彼此透明地構建。

(是的,該行是所有你需要的 - 無需導入sys,使用for循環,或其他編碼調用)。

+0

我的目標實際上並不是將字節編碼爲utf-8,而是將輸入中的字節視爲編碼utf-8值的代碼。 實際上,在PHP中,可以是: '公共靜態函數isoUTF($ STR){ \t \t \t $ RET = ''; \t \t \t $ l = strlen($ str); \t \t \t爲($ I = 0; $ I <$升; $ I ++){ \t \t \t \t $代碼= mb_convert_encoding( '&#' ORD($ STR [$ I])。。 ';', 'utf-8','HTML-ENTITIES'); \t \t \t \t爲($ J = 0; $Ĵ Ottunger

+0

如果您認爲字符串爲utf-8,那麼jst會解碼它們傳遞「utf-8」作爲編解碼器名稱。 但是在恢復編碼之前,也許你會更好地閱讀本文 - 請爲自己做這件事:http://www.joelonsoftware.com/articles/Unicode.html – jsbueno