我在研究導致Perl CGI腳本向數據庫寫入不正確值的錯誤的原因。什麼可能導致perl cgi腳本錯誤地將發佈的表單數據解釋爲UTF-8編碼?
這個Perl腳本從另一個系統(而不是瀏覽器)接收數據,它肯定使用ISO-8859-1編碼。不正確的數據,因爲它被寫入到數據庫中,如下所示:
Gro�Gr�nF�rbung�sterreich
當它應該是
GroßGrünFärbungÖsterreich
我發現我可以通過修改腳本來創建這樣一個錯誤的數據庫條目使用decode('utf8', $xyz)
而不是$xyz
。所以我的問題是:是否有任何影響,例如HTTP標頭,環境變量,配置文件等,這可能會導致perl CGI模塊隱式地執行這個decode
?
原始源代碼:
my $ack = new CGI;
my $xyz = $ack->param('xyz');
在某些情況下
顯然表現得像:
use Encode qw(decode encode);
my $ack = new CGI;
my $xyz = decode('utf8',$ack->param('xyz'));
你應該很高興沒有[captial sz](https://en.wikipedia.org/wiki/Capital_%E1%BA%9E)''在那裏。 :) – simbabque