【发布时间】:2010-07-24 20:28:48
【问题描述】:
我在 Perl 中遇到了 Unicode 字符问题。当我从网络接收数据时,我经常会收到√¢¬Ä¬ú 或√¢¬Ç¬¨ 之类的字符。第一个是引号,第二个是欧元符号。
现在我可以轻松地在 Perl 中替换正确的值并将正确的单词打印到屏幕上,但是当我尝试输出到 .CSV 文件时,我所做的所有替换都是徒劳的,而且我的 . CSV 文件。 (引号有效,猜测是因为它是一个通用字符)。 Numéro 也会给 Numéro。例子不胜枚举。
我写了一个小程序来尝试解决这个问题,但不确定问题是什么。我在另一个堆栈溢出线程上读到,您可以在 Excel 中导入 .CSV 并选择 UTF8 编码,但此选项不会为我弹出。我想知道我是否可以将其编码为 Excel 的本机字符集(UTF16BE???),或者是否有其他解决方案。我在这个短程序上尝试了许多变体,让我再说一遍,它只是为了测试 Unicode 问题,而不是合法程序的一部分。谢谢。
use strict;
use warnings;
require Text::CSV_XS;
use Encode qw/encode decode/;
my $text = 'Numéro Numéro Numéro Orkos Capital SAS (√¢¬Ä¬úOrkos√¢¬Ä¬ù) 325M√¢¬Ç¬¨ in 40 companies headquartered';
print("$text\n\n\n");
$text =~ s/“|”/"/sig;
$text =~ s/’s/'s/sig;
$text =~ s/√¢¬Ç¬¨/€/sig;
$text =~ s/√¢¬Ñ¬¢/®/sig;
$text =~ s/ / /sig;
print("$text\n\n\n");
my $CSV = Text::CSV_XS->new ({ binary => 1, eol => "\n" }) or die "Cannot use CSV: ".Text::CSV->error_diag();
open my $OUTPUT, ">:encoding(utf8)", "unicode.csv" or die "unicode.csv: $!";
my @row = ($text);
$CSV->print($OUTPUT, \@row);
$OUTPUT->autoflush(1);
这两行我也试过了,没用:
$text = decode("Guess", $text);
$text = encode("UTF-16BE", $text);
【问题讨论】:
标签: perl excel unicode character-encoding