.txtファイルで奇妙な文字を修正する方法は?

.txtファイルで奇妙な文字を修正する方法は?

WindowsのVisual Studioで.txtファイルを編集してHPCサーバーにコピーしました。最初はファイルは大丈夫だったが、 ここに画像の説明を入力してください。

しかし、Linux環境で開くと、奇妙な文字が表示されます(実際には尋ねます"sampleID.txt" may be a binary file. See it anyway?)。文字エンコーディングに問題があると思いますが、Visual Studioでこのファイルを保存しようとすると、「このファイルの一部のUnicode文字を現在のコードページに保存できません」というメッセージが表示されるため、この問題の原因は何であるかわかりません。データを保持するために、このファイルをUnicodeとして再保存しますか? 「誰でもこのファイルを簡単に修正する方法がありますか?ありがとう! ここに画像の説明を入力してください。

答え1

最初の3バイトは誤って使用されたバイトオーダーマークで、utf-8に変換されます。 UTF-8はバイトオーダーマークを使用しないでください。

残りの3つの繰り返し文字はa (aではありません-)です。

これはDebian Gnu / Linuxの端末、emacsなどを介してうまく表示されます。

作業量を減らすには、ロケールを正しく設定する必要があります。

たとえば、英国英語の場合(米国の場合はGBをUSに変更)、他の言語の場合はutf8が含まれていることを確認してください。すべてのローカル言語にutf-8を使用する必要があり、他のエンコーディングは廃止され、互換性がなくなりました。 。

LANG=en_GB.utf8
LANGUAGE=en_GB
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME=en_GB.utf8
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

答え2

次の方法では、UTF-8エンコーディングを使用するシステムでファイルを再現できます。

{ printf '\xef\xbb\xbf';
  for i in {3..6}; do 
      printf '%s\r\n' ped1_D$((2*(i-2)+2))_{1..3}_g$i−b1−{s,i}1;
  done;
} >file

もしそうなら、はい、lessエンコードがUTF-8でない場合、コマンドはファイルがバイナリかどうかを尋ね、次のように再生できます。

LC_ALL=C less file

はい、多くの特殊文字が表示されます。

ただし、これはLESSでのみ発生し、他のほとんどのエディタ(nano、vi、emacs)はDOSエンコーディングによって誤って案内されることなくファイルを開く可能性があります。

行末のキャリッジリターン(\ r)を削除する最も簡単な方法そして不要なBOM(Byte Order Mark)自動削除はdos2unixを使用して行われます。 UTF-8 はバイトの並べ替えを必要としないバイト中心の形式で、すべてのバイトはネットワーク順で動作します。 BOMは、16ビットまたは32ビットの文字エンコーディングにのみ役立ちます。

dos2unix file

しかし、システムの実際の問題は、utf-8のデフォルトのエンコーディングを使用しないことです。現在、ほとんどのオペレーティングシステムはデフォルトでUTF-8を使用します。次のように:

LC_ALL=en_US.UTF-8 less file

locale印刷名にutf-8エンコーディングが含まれていることを確認し、必要に応じてコンソールがutf-8エンコーディングをstty -a使用していることを確認してください-iutf8

関連情報