gpt4 book ai didi

perl - 以Perl格式书写时如何使用Unicode字符?

转载 作者:行者123 更新时间:2023-12-04 22:01:59 26 4
gpt4 key购买 nike

基本上我有一个数据库,我可以从中获取 $lastname$firstname$rid$since$times$ip

使用 Perl 脚本,我格式化数据以通过电子邮件发送。由于 $lastname$firstname 可以包含特殊字符(例如 ä、ü、ß、é、...),我首先对字符串进行解码。

my $fullname = decode("utf8", $lastname) . ', ' . decode("utf8", $firstname);
my $send = swrite(<<'END', $ip, $fullname, $rid, $since, $times);
@<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<< @<<<<<<<<<<<<<< @>>END

没有 decode ,特殊字符是垃圾(ä 变成 À),其余的都可以。
使用 decode ,一切都很好,除了名称包含特殊字符的行有几个 < 太多。

这是为什么?我该如何删除它们?

编辑: swrite 来自 perldoc perlform
sub swrite {
my $format = shift;
$^A = '';
formline($format, @_);
return $^A;
}

编辑2:
问题不在于终端,也不在于 STDOUT。我用:
use Mail::Sender;
use vars qw($sender);
#...
$sender->MailMsg({to => $mailto,
cc=> "",
bcc => "",
subject => "subject",
msg => $send});

并且收到邮件时字符显示不好。

编辑3:
我得到的数据已经被打乱了。我得到 'À' 而不是 'ä',这就是我的格式失败的原因,因为使用解码时字符数会减少。

最佳答案

我从来没有想过了解格式。这是一个不好的答案,因为我无法提供有关您的问题和/或潜在解决方案的任何见解,但是其他人已经做到了。我将提供两个替换建议。

第一个, Perl6::Form 应该作为更好的 format 有用,尽管在我今天整理这个例子之前我从未使用过它。另一方面,我使用过 Text::Table ,它对于创建纯文本表格非常有用(大多数时候,我只生成 HTML,但电子邮件仍然是纯文本明显更好的地方之一)。

Perl6::Form 示例:

#!/usr/bin/perl

use strict;
use warnings;

use Perl6::Form;

my @data = (
['127.0.0.1', 'Johnny Smithey', 'JLNSJIV', 14, 5],
['127.0.0.2', 'Ömer Seyfettin Şınas', 'OSS3', 25, 5],
);

for my $data_ref ( @data ) {
print format_data($data_ref);
}

sub format_data {
my ($data) = @_;
return form
'{<<<<<<<<<<<<<<<} {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} ' .
'{<<<<<<<<<<} {<<<<<<<<<<<<<<} {>>}',
@$data;
}

Text::Table 示例:
#!/usr/bin/perl

use strict;
use warnings;

use Text::Table;

my %common_options = (
align => 'left',
title_align => 'center',
);

my $sep = \' ';

my $table = Text::Table->new(
{
title => 'IP Address',
sample => '<' x 15,
%common_options,
},
$sep,
{
title => 'Full Name',
sample => '<' x 34,
%common_options,
},
$sep,
{
title => 'RID',
sample => '<' x 10,
%common_options,
},
$sep,
{
title => 'Since',
sample => '<' x 14,
%common_options,
},
$sep,
{
title => 'Times',
sample => '>' x 2,
align => 'right',
title_align => 'center'
},
);

$table->rule('');

$table->load(
['127.0.0.1', 'Johnny Smith-Jones', 'JLNSJIV', '20090814010203', 5],
['127.0.0.2', 'Ömer Seyfettin Şınas', 'OSS3', '20071211101112', 3],
['192.168.172.144', 'Jane Doe', 'JD156', '20080101010101', 1],
);

print $table->table;

关于perl - 以Perl格式书写时如何使用Unicode字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1301770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com