如何从MSSQL Server nvarchar列中使用Spreadsheet :: WriteExcel输出欧元符号

时间:2011-05-26 19:05:38

标签: windows perl excel sql-server-2008 spreadsheet

我在MSSQL 2008 Server上的nvarchar列中有带有€符号的文本,并希望通过Spreadsheet :: WriteExcel将该文本转储到Excel文件中,但我总是得到一些有线签名而不是€。

到现在为止,我将我的字符串直接放在perl中,总是使用类似

的字符串
my $euro = chr 0x20AC;
$worksheet->write($currentline, $currentcolumn, "Some text here".$euro ,$format);
总是有效的

任何提示?

  • ActivePerl v5.10.0
  • MSSql Server 2008
  • 每个ADO的访问权限=> Win32::OLE->new("ADODB.Recordset");

2 个答案:

答案 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