2015-10-13 36 views
-1

我有一些文件出現在我的Linux系統上。這些文件名可以是其他的un_eng-utf8。我想將它們從非utf8字符轉換爲utf-8字符。我該如何使用C庫函數或Python腳本來做到這一點。將非UTF-8字符轉換爲UTF-8

+2

你知道原始編碼?是否所有字符都以UTF-8格式提供,或者您是否想用相似的字符替換不可用的字詞,忽略它們還是對它們做其他事情? – TobiMarg

回答

0
def converttoutf8(a): 
    return unicode(a, "utf-8") 

現在每次遍歷文件名,將返回UTF-8格式的文件名

,甚至更好,使用convmv。它將文件名從一種編碼轉換爲另一種編碼,並將目錄作爲參數。聽起來很完美。

+0

你的代碼假定'a'字節串使用utf-8編碼進行編碼。 OP明確表示輸入不是utf-8。 – jfs

2

如果你知道這是用來編碼的文件名中的字符編碼:

unicode_filename = bytestring_filename.decode(character_encoding) 
utf8filename = unicode_filename.encode('utf-8') 

如果您不知道字符編碼再有就是在一般情況下,沒有辦法做轉換,而不丟失數據 - 「非UTF8」不夠具體例如,如果你有一個包含b'\xae'字節的話,就可以根據文件名編碼不同的解釋文件名 - 這是cp1252編碼u'®'相同的字節代表u'«' in cp437。有模塊,如chardet,讓你猜字符編碼,但它只是猜測 - "There Ain't No Such Thing as Plain Text."