2013-10-18 30 views
1

我編寫了一個使用CAM PDF模塊從PDF文件中提取PDF元數據的perl腳本。然後我使用DBI將這些數據插入到MySQL中。我跑過了一個包含特殊字符的PDF文件。我可以確認MySQL模式和數據庫表設置爲UTF8。我有Perl腳本設置爲使用utf8 use utf8;我也有DBI連接設置爲使用此mysql_enable_utf8 => 1Perl將商標符號插入到Mysql中

我現在可以保存一些符號(版權,註冊),但商標符號被轉換爲撇號/口音。我讀了$dbh->do('SET NAMES utf8')這個設置可以幫助解決這個問題,但是在我的場景中,它會在符號第一次遇到後切割所有文本。

我猜測問題是來自PDF的文本是以另一種編碼格式設置的,而不是UTF8。我試圖使用use Encoding模塊對這些字符串進行解碼/編碼,並將符號轉換爲文本。當使用php將該文本輸出到網頁時,它將顯示爲文本而不是符號。

+0

聽起來就像你已經將數據呈現爲ISO-8859-1或Windows-1252而不是UTF-8。 – tadman

+1

'use utf8'只聲明你的腳本是用UTF-8編碼的。它什麼都不做。有關更多信息,請參閱'perldoc'頁面'utf8'和'perlunicode'。 –

回答

2

爲了增加use utf8是不是與此有關?PDF metadata use special PDFDocEncoding(或UTF-16BE,如果PDFDocEncoding的是不夠的,但是這不是你的情況),其中商標是十進制的146 - 這是quoteright在CP1252,這就是你得到的。因爲CAM::PDF不做任何解碼(既不PDF::API2,btw)並返回原始字節。你必須自己解碼它們。但是,對於簡單的元數據提取任務,您可以使用Image::ExifTool,它表示它會自動從PDFDocEncoding進行解碼。

+0

感謝您建議Image :: ExifTool。這解決了我的編碼問題。 – raupie