perl – Unicode-ready wordsearch – 问题

perl – Unicode-ready wordsearch – 问题,第1张

概述这段代码好吗?我真的不知道我应该使用哪种规范化形式(我唯一注意到的是NFD我输错了). #!/usr/local/bin/perluse warnings;use 5.014;use utf8;binmode STDOUT, ':encoding(utf-8)';use Unicode::Normalize;use Unicode::Collate::Locale;use Unic 这段代码好吗?我真的不知道我应该使用哪种规范化形式(我唯一注意到的是NFD我输错了).

#!/usr/local/bin/perluse warnings;use 5.014;use utf8;binmode STDOUT,':enCoding(utf-8)';use Unicode::normalize;use Unicode::Collate::Locale;use Unicode::GCString;my $text = "my taxt täxt";my %hash;while ( $text =~ m/(\p{Alphabetic}+(?:'\p{Alphabetic}+)?)/g ) { #'    my $word = ;    my $NFC_word = NFC( $word );    $hash{$NFC_word}++;}my $collator = Unicode::Collate::Locale->new( locale => 'DE' ); for my $word ( $collator->sort( keys %hash ) ) {    my $gcword = Unicode::GCString->new( $word );    printf "%-10.10s : %5d\n",$gcword,$hash{$word};}
解决方法 哇!!我无法相信没有人回答这个问题.这是一个非常好的问题.你几乎也是对的.我喜欢你使用Unicode :: Collat​​e :: Locale和Unicode :: GCString.对你有益!

您输出“错误”输出的原因是因为您没有使用Unicode :: GCString类的列方法来确定要打印的内容的打印宽度.

printf是非常愚蠢的,只计算代码点,而不是列,所以你必须编写自己的pad函数,将GCS列考虑在内.例如,要手动完成,而不是写这个:

printf "%-10.10s",$gstring;

你必须这样写:

$colwIDth = $gcstring->columns(); if ($colwIDth > 10) {      print $gcstring->substr(0,10); } else {     print " " x (10 - $colwIDth);     print $gcstring; }

看看它是如何工作的?

现在规范化并不重要.忽略Kerrek的旧评论.这是非常错误的. UCA专门设计为不让规范化进入此事.你必须向后弯曲到螺旋而不是向上,比如通过标准化=>如果你想使用它的gmatch方法或者其他类似的东西,请在构造函数中使用undef.

总结

以上是内存溢出为你收集整理的perl – Unicode-ready wordsearch – 问题全部内容,希望文章能够帮你解决perl – Unicode-ready wordsearch – 问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存