顧客から受け取った一部のファイルは、US-ASCIIと宣言されていますが、無効な文字が含まれているため、正しく処理できません。ソフトウェアの修正を確認するために、元のファイルの数行を新しいファイルにコピーしてみました。元のファイルは非常に大きく、数行しか必要ありません。
元の行はgeditで次のようになります003002002002\D4M
。\D4
赤で無効な文字に関する警告が表示されます。コンソールでは、元の行は次のようになります。003002002002�M
ヘッドとテールを介してファイルパイピングを試みましたが、結果ファイルに無効な文字の代わりに「固定」文字が含まれています。
head -n 449025 invalid.txt | tail > invalid_short.txt
生成されたファイルをキャプチャすると、次の行が表示されます。003002002002�M
ただし、生成されたファイルをgeditで開くと、次のようになります。003002002002ÔM
そして間違った文字はありません。
geditで行を選択して新しいファイルとして保存しようとしましたが、元の文字ではなく無効な文字のみが表示されます。 catとgeditを使用すると、次のようになります(無効な文字警告なし、赤色なし)。003002002002\D4M
簡単な内容が欠けているようですが、何かわかりません。
ありがとう
Ubuntu 16.04、zsh
ベストアンサー1
head
tail
または固定する/変化数値。
おそらく何が起こっているのかは、gedit
最初の数バイトに基づいてファイルのエンコーディングを推測しようとしているということです。 0xD4 がファイルから離れている場合、gedit
ファイルが ASCII または UTF-8 形式であると推測され、0xD4 バイトが ASCII または UTF-8 形式で無効であることが判明した場合、文句を言います。
2番目の短いファイルの場合、0xD4はファイルの先頭に近いので、gedit
推測される文字セットはいくつかの8ビット文字セットです(おそらくiso8859-1、ここで0xD4はÔ)。
だからあなたの:
head -n 449025 invalid.txt | tail > invalid_short.txt
方法は正しいです。両方のファイルで実行すると、どちらの場合も.with:sed -n l
などの内容が表示されます。003002002002\324M
hd
30 30 33 30 30 32 30 30 32 30 30 32 d4 4d |003002002002.M|