2015-05-22 43 views
0

我試圖編碼'英鎊',並插入數據庫它存儲爲'Â £',而提取它顯示爲英鎊,我解碼這些數據,但事件雖然它顯示爲英鎊。使用perl腳本,這是我的代碼。英鎊(英鎊)的拉丁字符編碼使用perl腳本編碼後拋出垃圾值

#!/usr/local/perl-5.20.1/bin/perl 
use HTML::Entities; 
$str="£"; 
$str=HTML::Entities::encode($str); 
my $sth = $dbh->prepare("INSERT INTO notes VALUES (null,'FD',?,?)"); 
$sth->execute('1','2',time(),$str); 
$sth = $dbh->execute("SELECT content FROM notes WHERE requestID = 1); 
while (my @temp = $sth->fetchrow_array()) { 
$note = HTML::Entities::decode($temp[0]); 
} 

在終端被取出的DB數據(Â £)

+0

您能否請您從終端添加確切的outut並檢查您的文件的編碼? – simbabque

+0

我試圖編碼'英鎊',並插入到它存儲爲'Â £'的數據庫,而提取它顯示爲英鎊,我解碼這些數據,但事件雖然它顯示爲英鎊使用perl腳本, – user3829086

+1

你已經在問題中說過了。但沒有額外的信息,就不可能瞭解發生了什麼。 **請[編輯]您的問題**並添加完整的終端輸出,包括如何運行腳本以及如何打印。 – simbabque

回答

1

的解碼之後顯示作爲£如果有ASCII的範圍之外的字符你的Perl腳本內就得use utf8並確保你的腳本存儲在utf-8編碼中(它是)。

use utf8現在的主要目的是告訴perl你的腳本存儲在utf8中。如果您想將其用於其他內容,請首先閱讀perldoc perlunicode,可能您需要一些其他附註或模塊。

此外,你沒有說明你的數據庫驅動程序是什麼。可能您的數據庫能夠將值存儲爲二進制數據,然後您可以使用Encode::decode對其進行解碼,或者您的驅動程序能夠存儲utf-8文本,那麼您可以使用它。

+0

我在腳本中添加了'use utf8',添加了 binmode(STDOUT,「:utf8」);打印結果之前。但是,我得到的同樣的錯誤它是顯示在英寸 – user3829086

+0

它應_should_這種方式。你可以用'use utf8'來創建一個腳本;使用HTML :: Entities;打印encode_entities(「£」);'它應該打印'£'。 –

+0

是的,它正在打印£但是在插入數據庫時​​將其更改爲Â £ – user3829086