[〜#〜] oecd [〜#〜]http://stats.oecd.org/Index.aspx?datasetcode=CRS1 ( ' CRS 2013 data.txt ')[エクスポート]-> [関連ファイル]を選択します。このファイルをUbuntu(14.04 LTS)で操作したいと思います。
私が走るとき:
dos2unix CRS\ 2013\ data.txt
そうですか:
dos2unix: Binary symbol 0x0004 found at line 1703
dos2unix: Skipping binary file CRS 2013 data.txt
私はファイルのエンコーディングを次のようにチェックします:
file --mime-encoding CRS\ 2013\ data.txt
参照してください:
CRS 2013 data.txt: utf-16le
私がやります:
iconv -l | grep utf-16le
これは何も返さないので、私はします:
iconv -l | grep UTF-16LE
これは次を返します:
UTF-16LE//
それから私は走ります:
iconv --verbose -f UTF-16LE -t UTF-8 CRS\ 2013\ data.txt -o crs_2013_data_temp.txt
とチェック:
file --mime-encoding crs_2013_data_temp.txt
参照してください:
crs_2013_data_temp.txt: utf-8
それから私は試します:
dos2unix crs_2013_data_temp.txt
そして取得:
dos2unix: Binary symbol 0x04 found at line 1703
dos2unix: Skipping binary file crs_2013_data_temp.txt
それから私はそれを強制しようとします:
dos2unix -f crs_2013_data_temp.txt
これは機能します。つまり、dos2unixは救済/不満なしで変換を完了しますが、ファイルを開くと、「FoÄŤaandÄŚajniÄŤe」のようなエントリが表示されます。
私の質問はなぜですか? BOMがdos2unixに表示されないためですか?足りないから?私は正しく変換をしていませんか?このファイルを(正しく)変換して、読み取れるようにするにはどうすればよいですか?.
ファイルに表示されている0x0004文字は、BOMとはまったく関係ありません(ちなみに、これは問題ありません)。これは、C0コントロールセットのEOT(End of Transmission)文字であり、そのコードポイントにあります。 7ビットASCIIが新しい注目度でした。(これはおなじみのControl-D Unix EOFシーケンスでもあります。)
残念ながら、ファイルがUTF-16であるため、tr
をファイルに適用してキャリッジリターンを削除するpre-dos2unix
の方法は直接機能しません。ただし、iconv
は機能するため、これを使用してUTF-8(tr
が機能します)に変換してから、次のtr
コマンドを実行できます。
tr -d '\r' < crs_2013_data_temp.txt > crs_2013_data_unix.txt
テキストファイルをUnixの行末規則に入れるため。ただし、ファイルをフィードするツールに注意を払い、それら Ctrl-D/EOT文字で窒息しないようにする必要があります。もしそうなら、あなたは使うことができます
tr -d '\004' < crs_2013_data_unix.txt > crs_2013_data_clean.txt
それを取り除くために。
そもそもどうやってそこにたどり着いたのか?ベルギー人がOECDに提供したデータに忍び込ませたのは、おそらくcat - > file
または他の同様の圧倒的な手段で入力したものだと私は非難します。また、一部のテキストエディタは、制御文字を非表示にすることで少し役に立ちすぎようとしますが、他のツールは、しばらくの間テキストのふりをしていたバイナリファイルを詰め込んだと思って、制御文字を見ると救済されます。
このコマンドはあなたの問題には問題ないと思います:
cat file | tr -d "\r" > new_file
それが私が解決した方法です:
find . -type f -exec sed -i 's/\r//' {} \;