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

| 我在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服务器2008 每个ADO的访问权限=>
Win32::OLE->new(\"ADODB.Recordset\");
    
已邀请:
Spreadsheet :: WriteExcel中的Unicode处理相对简单:如果您要编写的字符串是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,了解一些背景知识。     
这完全有可能是字符集问题。欧元符号没有得到很好的支持,而就字符集而言,Microsoft格式可能是一个垃圾。 我没有实际的解决方案,但是弄清楚WriteExcel正在尝试使用您的字符集以及Excel实际支持的内容将是一个好的开始。对于它的价值,Perl默认情况下将字符串存储为Unicode,如果要使用UTF-8,则需要显式进行转换。 有关Perl和字符集的信息,请查看JSON :: XS的手册页,这是那里最好的资源。 http://search.cpan.org/~mlehmann/JSON-XS-2.3/XS.pm     

要回复问题请先登录注册