我在包含特殊字符的字符串上使用match
函数时遇到问题。awk
考虑文件test.awk
:
{
match($0,"(^.*)kon",a);
print a[1];
}
以及相应的测试文件“test.txt”,内容为“Testing Håkon”(注意挪威字符“å”)。该文件以“iso-8859-1”编码,长度为 14 字节。文件的十六进制转储由xxd -p test.txt
as给出
54657374696e672048e56b6f6e0a
从中我们可以看到,挪威字符“å”已经用十六进制数字“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 编码。