特殊文字を含む文字列match
で関数を使用する際に問題があります。awk
ファイルを検討してくださいtest.awk
:
{
match($0,"(^.*)kon",a);
print a[1];
}
対応するテスト ファイル "test.txt" の内容は "Testing Håkon" (ノルウェー文字 "å" に注意)。ファイルは「iso-8859-1」でエンコードされ、長さは 14 バイトです。ファイルの 16 進ダンプは次のように与えられますxxd -p test.txt
。
54657374696e672048e56b6f6e0a
そこから、ノルウェー文字「å」が 16 進数の「e5」でエンコードされていることがわかります。つまり、ファイルは iso-8859-1 エンコードを使用してエンコードされています。
ランニング
awk -f test.awk test.txt
ターミナルで何も与えません..正しい出力は「Testing Hå」であるはずですが..
locale
コマンドの実行結果は次のとおりです。
LANG=en_DK.UTF-8
LANGUAGE=en_US:
LC_CTYPE="en_DK.UTF-8"
LC_NUMERIC="en_DK.UTF-8"
LC_TIME="en_DK.UTF-8"
LC_COLLATE="en_DK.UTF-8"
LC_MONETARY="en_DK.UTF-8"
LC_MESSAGES="en_DK.UTF-8"
LC_PAPER="en_DK.UTF-8"
LC_NAME="en_DK.UTF-8"
LC_ADDRESS="en_DK.UTF-8"
LC_TELEPHONE="en_DK.UTF-8"
LC_MEASUREMENT="en_DK.UTF-8"
LC_IDENTIFICATION="en_DK.UTF-8"
LC_ALL=
これは、「LANG」変数が utf-8 エンコーディングに設定されていることを示しています。