當mojibake上比其他的ANSI字符編碼處理,你必須檢查兩件事情:
是在X
真的編碼的文件? (X
在你的情況下是沒有BOM的UTF-8,你可能試圖以utf-8的形式讀取UTF-8 WITH BOM,UTF-16,latin-1等等,這就是問題所在)。嘗試閱讀(不轉換爲)其他編碼,看看它們中的任何一個是否合適。
您的區域設置或文本編輯器是否設置爲以UTF-8格式讀取文件?如果不是,那可能是問題所在。檢查支持並找出如何更改設置。在Linux中,嘗試使用locale和setlocale命令來檢查並正確設置它。
我想你想如何notepad++的Windows(這也運行完全在Linux中使用酒)讓你設置任何編碼,如果你設置的任何其他一個比讀取文件沒有試圖將其轉換(當然該文件編碼在你將只看到那些奇怪的字符),並且還有一個不同的選項,它允許你從一個編碼轉換到另一個。這對我來說非常有用。
如果您是初學者,可能對此感興趣article。它簡要而清楚地解釋了字符編碼的最新特點和優點。
[編輯]如果上述失敗,甚至是Windows 1252和ANSI等編碼,我剛剛得知here如何刪除使用tr
UNIX命令非ASCII字符,將其轉換成ASCII(但要注意信息上多餘的字符是失去了在這個輸出並沒有回來,所以保持輸入文件,以防萬一你找到一個更好的修復):
tr -cd '\11\12\40-\176' < $INPUT_FILE > $OUTPUT_FILE
,或者,如果你想擺脫整條生產線的:
grep -v -P "[^\11\12\40-\176]" $INPUT_FILE > $OUTPUT_FILE
這個回答here給出了一個很好的猜測,如果沒有任何編碼在你的文件上工作會發生什麼(不幸的是,唯一直接的解決方案似乎是去除那些有問題的字符)。
你試過'dos2unix'? http://www.xinotes.org/notes/note/1377/例如 – fedorqui
它說它是一個二進制文件,不會對它起作用。 – bobylapointe
嗯,我想我貼得太快了。 'dos2unix'解決了新的線路問題,但我認爲它不能解決這些編碼問題。讓我們等待有更多知識的人回答:) – fedorqui