我在使用时遇到问题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编码进行编码。
Running
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 编码。
我已将您的代码修改为:
{
match($0,"(^.*)kon",a);
print ">>>" a[1] "<<<";
}
运行结果GNU Awk 3.1.6
在 Windows 7 下:
>>>Hå<<<
Ubuntu下运行GNU Awk 3.1.8
I get:
>>><<<
为了获得所需的输出,我必须暂时更改区域设置并进行翻译:
LC_ALL=ISO_8859-1 awk -f test.awk test.txt | iconv -f ISO_8859-1 -t UTF-8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)