ファイルから非ASCII文字を削除する必要があります。私はコマンドを使用しています -
/usr/xpg4/bin/tr -cd '\0-\177'
<non-ASCII_file.dat
>ASCII_file.dat
過去には働いていましたが、今は動作しません。これで、すべてのアルファベットと非ASCII文字を削除します。 ASCIIファイルに予約されている唯一の文字は、ASCIIセットの数字と特殊文字です。
オペレーティングシステムはSolaris 9です。
この問題の原因は何ですか? 8進数の範囲が誤って解釈されていますか?私の環境に関連していますか?
答え1
文字範囲の動作は、ロケール、つまり国際化設定によって異なります。ロケールごとに文字の順序が異なります。たとえば、フランス語のロケール(および文字を含むほとんどのロケールâ
)にはafterとbeforeがâ
あります。a
b
Cロケールは、文字がバイトでバイト値に基づいてソートされる言語中立(または選択する必要がある場合はアメリカ英語のみ)のロケールです。
ロケール領域は、文字タイプと文字が定義される順序を定義するtr
ことに関連しています。 UTF-8がデフォルトの文字セットにますます一般化されているので、文字のバイト数は可変です。LC_CTYPE
LC_COLLATE
同じ名前の環境変数を使用して指定できます。LC_ALL
しかし、それらをすべて覆ってください。したがって、目的の動作を取得するには、LC_ALLをオフにして目的の動作を設定する必要があります。あるいは、より簡単にLC_ALLを設定するだけです。
LC_ALL=C tr -cd '\0-\177'
または:
LC_ALL=C tr -d '\200-\377'
これはUTF-8データにも当てはまります。なぜなら、UTF-8はASCIIの上位セットであり、すべての非ASCII文字はすべてのバイトで8番目のビットが設定されているからです。