無効な文字を含むファイルの保存

無効な文字を含むファイルの保存

顧客から受け取った一部のファイルは、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

headtailまたは固定する/変化数値。

おそらく何が起こっているのかは、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\324Mhd30 30 33 30 30 32 30 30 32 30 30 32 d4 4d |003002002002.M|

おすすめ記事