2011-05-26 28 views
1

我在MSSQL 2008服務器的nvarchar列中使用了€符號並且希望通過Spreadsheet :: WriteExcel將該文本轉儲到Excel文件中,但是我總是得到一些有線註銷而不是€。如何使用Spreadsheet :: WriteExcel從MSSQL服務器nvarchar列輸出歐元符號

直到現在我把我的串起來用perl直接使用總是像

my $euro = chr 0x20AC; 
$worksheet->write($currentline, $currentcolumn, "Some text here".$euro ,$format); 

總是奏效。

任何提示?

  • 的activeperl v5.10.0
  • 的Windows
  • MSSQL服務器每ADO 2008
  • 訪問=>Win32::OLE->new("ADODB.Recordset");

回答

2

Unicode handling in Spreadsheet::WriteExcel比較簡單:如果您要編寫的字符串採用utf8格式,那麼它會完全按照您的預期寫入Excel文件。

確保您正在編寫的字符串是utf8格式,並不總是那麼直截了當。

要解決此問題,您只需要弄清楚來自MSSQL的字符串是什麼編碼,然後使用編碼模塊將它們轉換爲utf8。例如:

use Encode 'decode'; 

my $string = 'some string with koi8-r characters'; 
    $string = decode('koi8-r', $string); 

$worksheet->write('A1', $string); 

查看以上WriteExcel部分中鏈接的unicode perldocs的某些背景。

+0

你有什麼想法如何找出使用哪種編碼?我之前從文檔中嘗試了這個例子,但沒有成功:-(ofcourse not with「koi8 -r」:-) – Yots 2011-05-27 10:21:10

+0

我會猜測它不是一些UTF-16編碼,因爲你只有一些問題字符,而且每個第二個字符都沒有「\ 0」。也許數據已經是UTF-8格式,但它的utf8標誌沒有設置。如果是這種情況,請嘗試如下所示:'使用編碼'decode_utf8'; $ string = decode_utf8($ string);' – jmcnamara 2011-05-27 10:33:46

+0

順便說一句:感謝您的偉大模塊:-)現在我用它7年以上生成Excel文件 – Yots 2011-05-27 16:53:32

0

這是完全可能的,這是一個字符集問題。歐元符號沒有得到很好的支持,而且當涉及到字符集時,微軟格式可能成爲一種廢話。

我沒有一個實際的解決方案,但搞清楚WriteExcel試圖處理你的字符集以及Excel實際支持什麼是一個好的開始。對於它的價值,Perl默認將字符串存儲爲Unicode,如果您想要UTF-8,則需要明確進行轉換。

有關Perl和charsets的信息,請查看JSON :: XS的手冊頁,這是奇怪的最好的資源。 http://search.cpan.org/~mlehmann/JSON-XS-2.3/XS.pm

相關問題