我在MSSQL 2008 Server上的nvarchar列中有带有€符号的文本,并希望通过Spreadsheet :: WriteExcel将该文本转储到Excel文件中,但我总是得到一些有线签名而不是€。
到现在为止,我将我的字符串直接放在perl中,总是使用类似
的字符串my $euro = chr 0x20AC;
$worksheet->write($currentline, $currentcolumn, "Some text here".$euro ,$format);
总是有效的。
任何提示?
Win32::OLE->new("ADODB.Recordset");
答案 0 :(得分:2)
Unicode handling in Spreadsheet::WriteExcel相对简单:如果您尝试编写的字符串是utf8格式,那么它将完全按照您的预期写入Excel文件。
确保您编写的字符串采用utf8格式并不总是那么简单。
要解决此问题,您只需要确定来自MSSQL的字符串的编码,然后使用Encode模块将它们转换为utf8。例如:
use Encode 'decode';
my $string = 'some string with koi8-r characters';
$string = decode('koi8-r', $string);
$worksheet->write('A1', $string);
查看上面WriteExcel部分中链接的unicode perldocs的某些背景信息。
答案 1 :(得分:0)
完全有可能这是一个charset问题。欧元符号得不到很好的支持,而且在字符集方面,微软格式可能是一个废话。
我没有实际的解决方案,但是弄清楚WriteExcel试图用你的charset做什么以及Excel实际支持什么将是一个好的开始。对于它的价值,Perl默认将字符串存储为Unicode,如果你想要UTF-8,你需要明确地进行转换。
有关Perl和charsets的信息,请查看JSON :: XS的手册页,这是奇怪的最佳资源。 http://search.cpan.org/~mlehmann/JSON-XS-2.3/XS.pm