題 在unix上將文件類型轉換為utf-8 - iconv失敗[重複]


可能重複:
批量轉換文件以進行編碼或在Windows下結束行
如何使用* nix命令行工具將多個文件轉換為UTF-8編碼? 

我的Windows機器上有一個php文件,在用winSCP移動到* nix時,沒有正確顯示字符。

我把文件從linux機器拖回到windows並用Notepad ++檢查了編碼,它說它是ANSI。

所以我嘗試了iconv -f ANSI -t utf-8 filename.php> filename.php,但是得到一個不支持ANSI轉換的錯誤。 我也嘗試了MS_ANSI,我沒有得到任何錯誤,但我也沒有得到顯示正確編碼的文件。

我用winSCP打開文件以查看它的外觀,許多特殊字符顯示為“?”。看到腳本的目的是從我的數據中刪除這些特殊字符,這確實引起了一些問題。

是否有其他工具可以更改編碼?我嘗試了yum iconv,但得到了一個沒有包的可用響應。

你如何將這個文件轉換為正確的編碼?


6
2017-08-24 05:15


起源




答案:


我在WindowsXP(在Cygwin下)創建的MD5哈希有類似的麻煩,保存到文件,然後復製到Linux系統,在那裡計算哈希值以進行複制驗證。如果要散列的文件的名稱包含非ASCII字符,則md5sum報告該文件丟失,因為它沒有正確解碼文件名。但是,如果我在記事本中打開包含哈希值的文本文件並將編碼從ANSI更改為UTF-8,則Linux md5sum將獲得正確的編碼。

ANSI 並不是一個真正的編碼(除了微軟之外的任何人),所以這就是為什麼iconv沒有接受它。你可能會離開 窗口1252 相反,但不能保證它始終有效:

iconv -f windows-1252 -t utf-8 filename.from > filename.to

作為記錄, 文件 在其中一個MD5文本文件中給我這個:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text

5
2017-09-30 17:43





你確定“ANSI”是iconv的正確字符編碼/輸入名稱嗎?您可以嘗試運行“file filename.php”,通常文件會告訴(它認為)編碼是什麼。您也可以嘗試不指定 from 進行轉換時的編碼,或者您可以嘗試所有這些:

for i in `iconv -l`; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done

1
2017-08-24 11:09



我不能說我確定ANSI是正確的字符編碼,但Notepad ++告訴我當我將它從linux拖到pc時它是ANSI。從pc開始,它說它是UTF-8。我現在已經註意到,如果我用winSCP打開文件,我會得到“Ð¥”,“Ð|”,“Ч”,“Д,“Щ”,“Ъ”,“Ъ”' - 當我應該有'“у”,“ф”,“х”,“ц”,“ч”,“ш”,“щ”,“ъ”,“ы”,'。如果我關閉文件並再次打開它,那麼我只能得到'?'而不是任何特殊字符。 - pedalpete


您可以使用Notepad ++將其轉換為UTF-8。


1
2017-09-14 18:54





在Windows中有幾種稱為“ANSI”的編碼。事實上, ANSI是用詞不當。 iconv無法猜測你想要的是什麼。

ANSI編碼是Windows API中“A”函數使用的編碼(“W”函數使用UTF-16)。它對應的編碼通常取決於您的Windows系統語言。最常見的是CP 1252(也稱為Windows-1252)。因此,當您的編輯器說ANSI時,它意味著“無論API函數用作默認的ANSI編碼”,這是您系統中使用的默認非Unicode編碼(因此通常是用於文本文件的編碼)。

因此,要正確轉換文件,首先應該找出Windows系統的“ANSI”編碼(或者只是要求您的文本編輯器使用特定的編碼進行保存)。


1
2017-09-30 18:52



“它對應的編碼通常取決於您的Windows系統語言。”實際上是默認的系統區域設置。 - Yuhong Bao