最近使用 XML::Simple 剖析 UTF-8 編碼的 XML 檔, 結果讀出來的中文碼與 DB 取出來的無法對應, 才發現是 utf8 的問題.
以下是試出來的方法.. 至於為何會用 decode 而不是 encode 我也沒有仔細去探究原因..
#!/usr/bin/perl use XML::Simple qw(:strict); use utf8; : : # $db_str <- 這是由資料庫中取得的資料. # $v_str <- 這是在程式中定義的變數 # $xml_str <- 這是透過 XML::Simple 取得的 xml 內資料 $x = "[$db_str][$v_str][$xml_str]"; # $x 印出後會出現亂碼. print("x=$x\n"); utf8::decode($db_str); utf8::decode($v_str); $y = "[$db_str][$v_str][$xml_str]"; # $y 印出後可以正常顯示. print("y=$y\n");
#!/usr/bin/perl use XML::Simple qw(:strict); use utf8; : : # $db_str <- 這是由資料庫中取得的資料. # $v_str <- 這是在程式中定義的變數 # $xml_str <- 這是透過 XML::Simple 取得的 xml 內資料 $x = "[$db_str][$v_str][$xml_str]"; # $x 印出後會出現亂碼. print("x=$x\n"); $xml_str=to_utf8($xml_str); $y = "[$db_str][$v_str][$xml_str]"; # $y 印出後可以正常顯示. print("y=$y\n"); # 轉成 utf8 sub to_utf8 { local($p_str) = @_; if (utf8::is_utf8($p_str)){ utf8::decode($p_str); } return($p_str); }