我有每個表有COLLATE ='utf8_general_ci'的mysql db。打開perl上的utf8文件和雙重編碼
我連接到使用DBI表my $db = DBI->connect($cstring, $user, $password)
,沒有
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES 'utf8';});
然後選擇表,並用文字:: CSV到MYFILE其中MYFILE被打開,如下面將其複製到CSV文件:
binmode(Myfile, ":utf8")
,我重複上與開像上面放一些文件,我得到雙重編碼且僅當我刪除這些S中的binmode不同的文件不同的表,這個過程中的問題peicfic文件的問題解決了,而其他文件都很好,編碼爲utf8,如果我刪除binmode他們我得到一個問題在utf8 encdoing可能是什麼問題?
值得一提我試圖用:使用UTF8我的劇本,還試圖用
$db-> {mysql_enable_utf8} = 1
$db->do(qq{SET NAMES 'utf8';});
,但問題並沒有解決。
當你用binmode':utf8'配置文件時,你需要確保你提供它的字符串是'utf8 :: is_utf8',因爲如果它們不是,它們將從iso-8859-1解碼並且以utf8編碼導致雙重編碼。您必須配置連接才能正確返回標記爲utf-8或「utf8 :: decode」的字符串。 –
或者您可以不使用binmode;那麼它不應該修改編碼。 –
您確定問題不在於某些數據庫表包含雙重編碼值嗎? (即,您所描述的問題可能發生在輸入或輸出上。) – cjm