相关疑难解决方法(0)

为什么现代Perl默认会避免使用UTF-8?

我想知道为什么使用Perl构建的大多数现代解决方案默认情况下不启用UTF-8.

我知道核心Perl脚本存在许多遗留问题,可能会破坏它们.但是,从我的角度来看,在21 的世纪,新的大项目(或具有大的方面讲项目)应该从头开始他们的软件UTF-8的证明.我仍然没有看到它发生.例如,Moose启用严格和警告,但不启用Unicode.Modern :: Perl也减少了样板,但没有UTF-8处理.

为什么?是否有一些理由在2011年的现代Perl项目中避免使用UTF-8?


评论@tchrist太长了,所以我在这里添加它.

似乎我没有说清楚.让我尝试添加一些东西.

tchrist和我看到情况非常相似,但我们的结论完全是相反的.我同意,Unicode的情况很复杂,但这就是为什么我们(Perl用户和编码人员)需要一些层(或编译指示),这使得UTF-8处理变得像现在一样容易.

tchrist指出要涵盖的许多方面,我会阅读并思考它们几天甚至几周.不过,这不是我的观点.tchrist试图证明没有一种方法"启用UTF-8".我没有太多的知识可以与之争辩.所以,我坚持住实例.

我和Rakudo一起玩,UTF-8就在我需要的地方.我没有任何问题,它只是奏效了.也许在某些地方存在一些限制,但一开始,我测试的所有工作都按照我的预期进行.

这不应该是现代Perl 5的目标吗?我更强调一点:我不是建议将UTF-8作为核心Perl的默认字符集,我建议可以为那些开发项目的人快速触发它.

另一个例子,但更负面的语气.框架应该使开发更容易.几年前,我尝试过Web框架,但只是把它们扔掉了,因为"启用UTF-8"是如此模糊.我没有找到如何以及在何处挂钩Unicode支持.这是非常耗时的,我发现它更容易走老路.现在我看到这里有一个赏金来处理与梅森 2 相同的问题:如何让Mason2 UTF-8干净?.因此,它是一个非常新的框架,但使用UTF-8需要深入了解其内部.这就像一个大红色标志:停止,不要使用我!

我真的很喜欢Perl.但处理Unicode是痛苦的.我仍然发现自己在墙上奔跑.某种方式tchrist是正确的,并回答我的问题:新项目不吸引UTF-8,因为它在Perl 5中太复杂了.

unicode perl utf-8

555
推荐指数
6
解决办法
10万
查看次数

Perl Unicode内部 - 乱用utf8

在任何人告诉我RTFM之前,我必须说 - 我已经挖掘过:

那么,基本代码:

use 5.014;           #getting 'unicode_strings' feature
use uni::perl;       #turning on many utf8 things
use Unicode::Normalize  qw(NFD NFC);
use warnings;
while(<>) {
    chomp;
    my $data = NFD($_);
    say "OK" if utf8::is_utf8($data);
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,UTF8编码STDIN我得到了正确的Unicode字符串$data,如"\ W"将与多字节[\p{Alphabetic}\p{Decimal_Number}\p{Letter_Number}](也许更多的东西).那没关系,有效.

据我所知$data没有包含UTF8,但在一个字符串perl's internal Unicode格式.

现在的问题是:

  • 我如何确保(测试它),任何$other_data包含有效的Unicode字符串?
  • 出于什么目的,utf8 :: is_utf8($ data)?整个utf8 pragma对我来说是一个谜.

据我所知, …

unicode perl utf-8

10
推荐指数
2
解决办法
2405
查看次数

如何将带有重音符号,变音符号等的字母转换为Perl中的ASCII对应字母?

我正在编写一个与Perl中的文档一起工作的程序,并且许多文档都有诸如ä, ö, ü, é, etc(大写和小写)之类的字符.我想用ASCII版本替换它们a, o, u, e, etc.我怎么在Perl中做到这一点?

我想到的一个解决方案是使用键是变音符号和重音字符的哈希值,并且值是ASCII对应物,但是这需要我有一个所有变音符号和重音符号的列表,我没有,如果我建立了一个列表,我肯定会想念很多,因为我不熟悉可能有变音符号,重音符号和其他变音符号的所有可能字符.

perl ascii diacritics data-conversion

10
推荐指数
1
解决办法
1万
查看次数

为什么我的Perl程序使用Tie :: File和Unicode/UTF-8编码失败?

我正在开发一个处理外语数据的项目.我的Perl脚本运行正常.

然后我想使用Tie :: File,因为这是一个简洁的概念(并节省时间和编码).

看起来Tie:File在Unicode/UTF-8下失败了(除非我遗漏了什么).

这是一个描述问题的程序:(数据是英语,希腊语和希伯来语的混合):

use strict;
 use warnings;
 use 5.014; 
 use Win32::Console;
 use autodie; 
 use warnings qw< FATAL utf8 >;
 use Carp;
 use Carp::Always;
 use utf8;
 use feature        qw< unicode_strings>;
 use charnames      qw< :full>;
use Tie::File;

my ($i);
my ( $FileName);
my (@Tied);
binmode STDOUT, ':unix:utf8';
binmode STDERR, ':unix:utf8';
binmode $DB::OUT, ':unix:utf8' if $DB::OUT; # for the debugger
Win32::Console::OutputCP(65001);         # Set the console code page to UTF8

$FileName = 'E:\\My Documents\\Technical\\Perl\\Eclipse workspace\\Work\\'.
        'Tie File test res.txt';
tie @Tied, …
Run Code Online (Sandbox Code Playgroud)

unicode perl utf-8 tie

7
推荐指数
1
解决办法
1435
查看次数

删除重音字符的重音符号

我正在寻找建议我应该使用哪些库和/或函数将国际文本转换为它的英文字符替代品.

例如

Vous avez aimé l'épée offerte par les elfes à Frodon 
Run Code Online (Sandbox Code Playgroud)

转换成

Vous avez aime l'epee offerte par les elfes a Frodon 
Run Code Online (Sandbox Code Playgroud)

perl

3
推荐指数
1
解决办法
7739
查看次数

标签 统计

perl ×5

unicode ×3

utf-8 ×3

ascii ×1

data-conversion ×1

diacritics ×1

tie ×1