2012-02-08 27 views
0

我正在處理使用絕對路徑引用另一個文件的二進制文件。 該路徑包含日語和ascii字符。在python 3.x中使用帶有混合編碼的字符串

字符串的長度設定,這樣我就可以讀很多字節,並將其轉換成字符串。

但是,問題是試圖轉換字符串。如果我將編碼指定爲ascii,它將在日文字符上失敗。如果我將它指定爲日語編碼(shift-jis或其他),它將不會正確讀取英文字符。

一個字節被用於每個ASCII字符,而兩個字節被用於每個日語字符。

什麼是將這些字節轉換爲字符串的最快和最乾淨的方式?編碼是已知的。相同的技術是否可以在老版本的python中工作?

+1

請勿混用編碼;使用utf-8做一切事情。 – geoffspear 2012-02-08 04:05:20

+1

如果我正在閱讀的源不使用utf-8處理所有內容,那麼這將不起作用。我使用的許多其他文件都有不使用utf-8的開發人員(無論是中文,日文還是韓文)。 – MxyL 2012-02-08 04:15:41

+0

是否使用mybytestring.decode('shift-jis')不起作用?即使它不是一個真正的標準,shift-jis在理論上與ascii兼容,除了可能是\和〜字符。 – gps 2012-02-08 08:15:09

回答

3

這聽起來像是你誤會了Unicode和編碼的基礎知識的受害者。這可能是你沒有,但誤解是普遍和可以理解的,而你描述的情況並非如此。

字節的字符串包含混合編碼保,每個定義,在任何這些編碼的無效。如果真的如此,你將不得不將字節串分成它的部分,並且分開解碼每個部分。在這種情況下,它可能意味着在路徑分隔符上進行分割,所以它會相當容易,但在其他情況下則不會。不過,我很懷疑這是事實,因爲這意味着你的來源是瘋狂的。發生這種情況,但不太可能。 :-)

如果源代碼給出一個作爲字節字符串的路徑,則很可能該字符串只使用一種編碼。 它可能包含日文和ASCII字符,仍然使用一種編碼。可以處理日語和ASCII的最常見的編碼是UTF-8和UTF-16。我的猜測是你的源代碼使用其中之一。實際上,由於你寫了「每個ASCII字符使用一個字節,而每個日文字符使用兩個字節」,所以它可能是UTF-8。它也可以是Shift JIS,但看起來你已經嘗試過了。

如果不是,請說明你的來源是什麼,並給您提供的字節串(在ASCII/HEX)的例子。