これがどの16進ASCII文字であるかをどのように識別しますか?

これがどの16進ASCII文字であるかをどのように識別しますか?

テキストファイルがあり、「間違った」文字を整理したいと思います。 vimで開く場合(「:set number」を使用):

57000044 zo¥<9a>¥ge¥o¥graph¥i¥cal¥ly
39999999 pariá¹<83>Å<9b>a

たとえば、「<9a>」、「<83>」、「<9b>」はvimで青色で表示され、これら2行はvimの外側で次のようになります。

$ sed '57000044,57000044!d' toclean.txt
zo���ge�o�graph�i�cal�ly
$ sed '57000044,57000044!d' toclean.txt | cat -vte -
zoM-%M-^ZM-%geM-%oM-%graphM-%iM-%calM-%ly$
$ 

そして

$ sed '39999999,39999999!d' toclean.txt
pariṃśa
$ sed '39999999,39999999!d' toclean.txt | cat -vte -
pariM-aM-9M-^CM-EM-^[a$
$ 

質問:上記の「<9a>」、「<83>」、および「<9b>」の16進ASCII文字が何であるかをどうやって知ることができますか?または「1」または「¥」...

ファイルをすべて削除してよりきれいにするには、16進コードが必要です。たとえば、このコードは16進ASCII "x09"を削除するため、「水平タブ」になります。

sed -i 's/[\x09]//g' toclean.txt

16進数で「9A」または「A5」を試してみましたが、役に立ちませんでした。

$ sed '57000044,57000044!d' toclean.txt | sed 's/[\x9A]//g; s/[\xA5]//g'
zo���ge�o�graph�i�cal�ly
zo���ge�o�graph�i�cal�ly
$ 

ベストアンサー1

hex:<9a>およびhex:<83>コードはASCIIコードではありません(ASCIIコードは<00>から<7F>までのみ可能です)。また、どの文字(ASCIIより大きい文字セットから)がこれらのコードに関連付けられているかを「見つける」ことはできません。これは、デフォルトの文字セット(「コードページ」)エンコーディングによって異なります。したがって、データを作成した人にどの文字エンコーディングを使用したかを尋ねる必要があります。 (しばしば見つけることができる一般的なエンコーディングは、ISO 8859-1、ISO 8859-15、UTF-8、UCS-2です。あります。)

削除したいコード値がわかったら(オプション)オプション(8進引数)trでコマンドを使用できます。-d

おすすめ記事