gpt4 book ai didi

sql - 如何在 Perl 5 中将此 Unicode 表导出为 CSV?

转载 作者:行者123 更新时间:2023-12-02 00:42:52 25 4
gpt4 key购买 nike

我有一个表格,其中包含一些 Unicode。我知道 Unicode 数据很好,因为它在我们的网络服务器上以 JSON 格式输出就很好。但出于某种原因,我生成的 CSV 最终被破坏了。这是我们当前的代码:

  my $csv = Text::CSV->new ({ eol => "\015\012" });
open my $fh, '>:encoding(utf8)', 'Foo.csv';
my $sth = $dbh->prepare("SELECT * FROM Foo");
$sth->execute();
my $i = 0;
while (my $row = $sth->fetchrow_hashref) {
$csv->print($fh, [keys %$row]) if $i == 0;
$csv->print($fh, [values %$row]);
$i++;
}

有什么想法吗?

最佳答案

除了编码问题,我认为不能保证 values 总是以相同的顺序给出字段。每次调用它时,您可能会从 fetchrow_hashref 获得不同的 hashref。解决方案是使用 fetchrow_arrayref

Text::CSV推荐Text::CSV::Encoded :

my $csv = Text::CSV::Encoded->new({ eol => "\015\012" });
open my $fh, '>:raw', 'Foo.csv';
my $sth = $dbh->prepare("SELECT * FROM Foo");
$sth->execute();
$csv->print($fh, $sth->{NAME_lc}); # or NAME or NAME_uc

while (my $row = $sth->fetchrow_arrayref) {
$csv->print($fh, $row);
}

或者,如果您不想安装新模块:

use Encode 'find_encoding';
my $utf8 = find_encoding('utf8');

my $csv = Text::CSV->new({ binary => 1, eol => "\015\012" });
open my $fh, '>:raw', 'Foo.csv';
my $sth = $dbh->prepare("SELECT * FROM Foo");
$sth->execute();
# I'm assuming your field names are ASCII:
$csv->print($fh, $sth->{NAME_lc}); # or NAME or NAME_uc

while (my $row = $sth->fetchrow_arrayref) {
$csv->print($fh, [ map { $utf8->encode($_) } @$row ]);
}

关于sql - 如何在 Perl 5 中将此 Unicode 表导出为 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2051772/

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