作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Text::Unaccent 模块中遇到了一些奇怪的、与系统相关的问题。如果我遗漏了一些愚蠢的东西,我深表歉意,但我一直在用头撞这个几个小时,但没有真正的进展。
我有一个简单的脚本设置,可以很好地显示问题。
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use Text::Unaccent;
my $string = 'aaâaa';
my $unacd = unac_string("UTF-8", $string);
print "Accented: $string \n";
print "Unaccented: $unacd \n";
[user@prod]$ perl test_unaccent.pl
Accented: aaâaa
Unaccented: aaaaa
[user@dev]$ perl test_unaccent.pl
Accented: aaâaa
Unaccented: UTF-8
最佳答案
我不知道为什么你会得到你现在的输出,但我要说的是没有实际意义的。
您的 $string
不是 UTF-8 字节串;它是一串 Unicode 代码点。正确的用法[1] 是
unac_string("UTF-8", encode("UTF-8", $string));
unac_string
将字符串转换为 UTF-16be(使用
iconv
),然后将字符串传递给
unac_string_utf16
,你不妨使用
unac_string_utf16(encode("UTF-16be", $string));
use Encode qw( encode );
use Text::Unaccent qw( unac_string_utf16 );
sub unac_string {
my ($enc, $str) = @_;
return unac_string_utf16(encode("UTF-16be", $string));
}
unac_string("UTF-8", $unicode)
通常会给出正确的结果,但同样的错误使得 unac_string("UTF-8", $unicode)
和 unac_string("UTF-8", $utf8)
可能会给出错误的结果。 unac_string("UTF-8", encode("UTF-8", $unicode))
不过,总会给出正确的结果。 关于Perl Text::Unaccent 有意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018125/
我是一名优秀的程序员,十分优秀!