12

[エクスポート] -> [関連ファイル] を選択して、 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âŤa and ÄŚajniÄŤe」のようなエントリが表示されます。

私の質問はなぜですか?BOM が dos2unix から見えないからですか? 無くなったから?変換を正しく行っていませんか? このファイルを読み取れるように変換するにはどうすればよいですか (正しくは?)。

4

3 に答える 3

6

ファイルに表示されている 0x0004 文字は、BOM とはまったく関係ありません (ちなみに、これは問題ありません)。これは、C0 コントロール セットの EOT (End of Transmission) 文字であり、そのコードポイントにあります。 7 ビット ASCII が新しいホットネスだったからです。(おなじみの Control-D Unix EOF シーケンスでもあります。)

残念ながら、ファイルが UTF-16 であるため、キャリッジ リターンを削除するためにファイルにdos2unix適用する前の方法は直接には機能しません。trただし、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いる. また、一部のテキスト エディターは、制御文字を非表示にすることで少し役に立ちすぎようとしますが、他のツールは、しばらくの間テキストのふりをしていたバイナリ ファイルを詰め込んだだけだと考えて、それらを見ると救済されます。

于 2015-04-28T16:03:59.977 に答える