it-swarm-ja.tech

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
pedalpete

WindowsXP(Cygwinの下)で作成され、ファイルに保存されてからLinuxシステムにコピーされ、コピー検証のためにハッシュが計算されるMD5ハッシュでも同様の問題が発生します。ハッシュされているファイルの名前に非ASCII文字が含まれている場合、md5sumはファイル名が正しくデコードされていないため、ファイルがないことを報告します。ただし、ハッシュを含むテキストファイルをメモ帳で開いてエンコードをANSIからUTF-8に変更すると、Linux md5sumは正しいエンコードを取得します。

[〜#〜] ansi [〜#〜]は(Microsoft以外の誰にとっても)実際には適切なエンコーディングではないため、iconvがそれを採用していないのはそのためです。代わりにwindows-1252で逃げることができますが、常に機能するという保証はありません。

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

記録のために、fileはそれらのMD5テキストファイルの1つでこれを私に与えます:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
5
quack quixote

「ANSI」がiconvの正しい文字エンコード/入力名であると確信していますか? 「filefilename.php」を実行しようとすると、多くの場合、ファイルはエンコーディングが何であるかを教えてくれます。変換を行うときにfromエンコードを指定しないようにすることもできますし、それらすべてを試すこともできます。

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

Windowsでは「ANSI」と呼ばれるいくつかのエンコーディングがあります。実際、 ANSIは誤った名称です 。 iconvには、どちらを使用するかを推測する方法がありません。

ANSIエンコーディングは、Windows APIの「A」関数で使用されるエンコーディングです(「W」関数はUTF-16を使用します)。どのエンコーディングに対応するかは、通常、Windowsシステム言語によって異なります。最も一般的なのはCP 1252(別名Windows-1252)です。したがって、エディターがANSIと言う場合、それは「API関数がデフォルトのANSIエンコーディングとして使用するものは何でも」を意味します。これは、システムで使用されるデフォルトの非Unicodeエンコーディングです(したがって、通常はテキストファイルに使用されます)。

したがって、ファイルを正しく変換するには、まずWindowsシステムの「ANSI」エンコーディングを確認する必要があります(または、特定のエンコーディングを使用して保存するようにテキストエディタに依頼するだけです)。

1
CesarB

Notepad ++でUTF-8に変換するだけです。

1
Matthew Talbert