
iwlist wlo1 scan | grep ESSID
スクリプト内で実行しています。
次の形式でフランス語の文字を表示します。
\xC3\x89
Éと\xC3\xA9
éの場合。
この形式を何と呼ぶのかよくわかりません。使ってみようUnicode変換への回答 echo -ne '\xC3\xA9' | iconv -f utf-16be
しかし쎩
、。
この形式の公式名は何ですか? Bashからどのように変換しますか?
答え1
16進数の定数は通常0x
接頭辞で表されます。
文字と文字列定数は、\x
2 つの 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
hd
hexdumpユーティリティはどこにありますか?
だからあなたの仕事はただUTF-8エンコード(観察された出力は\xC3\x89
UTF-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
iwlist
ASCII 非制御文字に対応しないすべてのバイトを表示します。ここでは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-8
f