我有一个我认为微不足道的问题。我必须处理来自德语字母 ( äöü
) 的变音符号。在 Unicode 中,似乎有几种方法可以显示它们,其中一种是组合字符。我需要规范化这些不同的方式,将它们全部替换为单字符代码。
这种不正常的变音很容易找到:它是一个字母aou
,后跟 UTF-8 字符\uCC88
。所以我认为一个正则表达式就足够了。
这是我的转换功能,使用Encoding
包。
# This sub can be extended to include more conversions
sub convert {
local $_;
$_ = shift;
$_ = encode( "utf-8", $_ );
s/u\xcc\x88/ü/g;
s/a\xcc\x88/ä/g;
s/o\xcc\x88/ö/g;
s/U\xcc\x88/Ü/g;
s/A\xcc\x88/Ä/g;
s/O\xcc\x88/Ö/g;
return $_;
}
但是打印出来的元音变音符号是一些更狡猾的字符(现在占用 4 个字节),而不是这个列表中的那个。
我想问题在于 Perl 的内部格式、实际的 UTF-8 和这种编码格式。
甚至将替换行更改为
s/u\xcc\x88/\xc3\xbc/g;
s/a\xcc\x88/\xc3\xa4/g;
s/o\xcc\x88/\xc3\xb6/g;
s/U\xcc\x88/\xc3\x9c/g;
s/A\xcc\x88/\xc3\x84/g;
s/O\xcc\x88/\xc3\x96/g;
没有帮助,它们被正确转换但随后在字节中出现“\xC2\xA4”。
有什么帮助吗?