些細なことだと思っていた問題があります。私はドイツ語のアルファベット()からウムラウトを扱わなければなりませんäöü
。Unicodeでは、それらを表示する方法はいくつかあるようですが、そのうちの1つは文字の結合です。これらのさまざまな方法を正規化し、すべてを1文字のコードに置き換える必要があります。
このような逸脱したウムラウトは簡単に見つかります。これは文字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 $_;
}
しかし、結果として出力されるumlautは、このリストにあるものではなく、さらに悪質な文字(現在は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」が続く。
何か助けはありますか?