バッシュ\xC3\x89をÉに変換しますか?

バッシュ\xC3\x89をÉに変換しますか?

iwlist wlo1 scan | grep ESSIDスクリプト内で実行しています。

次の形式でフランス語の文字を表示します。

\xC3\x89Éと\xC3\xA9éの場合。

この形式を何と呼ぶのかよくわかりません。使ってみようUnicode変換への回答 echo -ne '\xC3\xA9' | iconv -f utf-16beしかし、。

この形式の公式名は何ですか? Bashからどのように変換しますか?

答え1

16進数の定数は通常0x接頭辞で表されます。
文字と文字列定数は、\x2 つの 16 進数の接頭辞が付いた 16 進数で文字コードを表すことができます。

echo -ne '\xC3\x89'あなたに与えなければなりませんÉ

  • -e- バックスラッシュエスケープ解析を有効にする(16進値(1〜2桁)を\xHH含むバイトを含む)HH

扱うより良い携帯性使用printf機能:

printf "%b" '\xC3\x89'
É

答え2

努力する

 % echo -n éÉ | hd
 00000000  c3 a9 c3 89                                       |....|
 00000004

hdhexdumpユーティリティはどこにありますか?

だからあなたの仕事はただUTF-8エンコード(観察された出力は\xC3\x89UTF-8の16進表現です)。今日私たちはUTF-8はどこでも

私の環境には(私はフランス人ですが)LANG=en_US.UTF-8両方があります。LC_ALL=en_US.UTF-8

返品、

echo '\xC3\x89\xC3\xA9'

生産する

Éé

予想通り。

これもこうだ

echo  "\\xC3\\x89\\xC3\\xA9" | iconv -t utf-8

また読んでくださいロケール(7)

一部文字エンコーディング(例:Old PlainsASCIIコードéまたはÉ文字なしで他の文字(例:ISO-8859-1)別の方法でエンコードします。

答え3

iwlistASCII 非制御文字に対応しないすべてのバイトを表示します。ここでは16進バイト数\xHHです。HH

このエンコーディングを元に戻すには、出力をiwlist次にパイプするだけです。

perl -pe 's/\\x([\da-f]{2})/chr(hex($1))/gie'

0xc3次のバイトは0xa9文字のUTF-8エンコーディングを構成しますé

ロケールでもUTF-8エンコーディングを使用している場合は、出力に対応するperl文字が表示されますé。それ以外の場合(おそらくUTF-8が標準であるため)、常に出力をパイプしてUTF-8からそのロケールで使用される文字エンコーディングにperl変換できます。iconv -f utf-8f

関連情報