regex - 字符名称,替换和Umlaut “Ü”:格式错误的UTF-8字符

标签 regex perl unicode utf-8 diacritics

我正在处理使用控制字符进行文本分隔的书目记录。当我在替代操作中使用Unicode字符名称“STRING TERMINATOR”时,如果文本包含“Ü”,则会收到“格式错误的UTF-8字符”警告。替换可与其他Unicode字符名称和包含“ü”,“ä”,“é”,...的文本一起使用。

#!/usr/bin/perl

use v5.12;

use utf8;
use strict;
use autodie;
use warnings;
# use warnings    qw< FATAL  utf8     >;
use charnames   qw< :full >;
use feature     qw< unicode_strings >;

binmode STDOUT, ':utf8';

my @records = (qq[\N{U+0098}L'\N{U+009c} Année du Figaro], qq[\N{U+0098}The\N{U+009c} famous ümläut], qq[\N{U+0098}The\N{U+009c} famous Ümlaut], qq[\N{U+0098}\N{U+00DC}\N{U+009c}]);

my %replace = (
    "\N{START OF STRING}"     => "<ns>",
    "\N{STRING TERMINATOR}"   => "</ns>",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;

foreach my $record (@records){
    $record =~ s/($regex)/$replace{$1}/g;
    say $record;
};

我使用Strawberry Perl v5.12.3.0。

如何避免这些警告?

谢谢,jorol

最佳答案

升级到5.14,it won't throw warnings there

关于regex - 字符名称,替换和Umlaut “Ü”:格式错误的UTF-8字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676699/

相关文章:

python - 如何使用 Django 和 Python 2 更正 unicode 字符串的测试

javascript - 将 unicode 字符串从 django 传递到 javascript

regex - HTML5 模式 - 不允许以下字符

java - 尝试在使用 Formatter 创建的字符串上使用 String.split() 正则表达式

javascript - 如何根据逗号分割字符串(括号内除外)

perl - 分割字符串

mysql - Bugzilla 中分离客户端的基本权限

regex - 正则表达式限制所有小于 100 个字符的字母

perl - 在分配之前测试哈希条目是否存在的更好方法

python - 如何让 matplotlib 在数字格式化程序中使用等宽 '+' 和 '-' ?