編碼 utf-8
我嘗試用getid3類庫從mp3檔案中提取歌曲資訊,大多數中文歌曲都正常,但少部分檔案有亂碼的情況。
// 這是提取出來的字元,及它的base64編碼
var_dump($str, base64_encode($str));
// string(16) "ÐÄËÆ¿ñ³±"
// string(24) "w5DDhMOLw4bCv8OxwrPCsQ=="
// 檢測字元編碼,得出的結果是 CP936
mb_detect_encoding($str, 'GBK, gb2312, GB18030, ISO-8859-1, ASCII, UTF-8', true)
// 我嘗試轉換此比編碼,但得出的結果還是不理想
mb_convert_encoding($str, 'UTF-8', 'CP936')
// string(24) "????驢帽魯鹵"
因為CP936和gbk, gb2312相相容,所以結果都是一樣的。
回複討論(解決方案)
$s = "w5DDhMOLw4bCv8OxwrPCsQ==";
$s = base64_decode($s);//ÐÄËÆ¿ñ³± (這是 utf-8 編碼的)
echo utf8_decode($s);//心似狂潮 (注意這是 gbk 編碼的)
由於你的那個系統不能識別 gbk 編碼,所以將構成 gbk 串的每個擴充 ASCII 字元都做了 ISO-8859-1 到 utf-8 編碼轉換
你也可以寫作
echo iconv('gbk', 'utf-8', iconv('utf-8', 'latin1', $s));
判斷是否為2位元組的utf-8編碼也很容易
echo (ord($s{0}) & 0xf0) == 0xc0 ? '是' : '不是';
我嘗試用getid3類庫從mp3檔案中提取歌曲資訊,大多數中文歌曲都正常,但少部分檔案有亂碼的情況。
// 這是提取出來的字元,及它的base64編碼
var_dump($str, base64_encode($str));
// string(16) "ÐÄËÆ¿ñ³±"
// string(24) "w5DDhMOLw4bCv8OxwrPCsQ=="
// 檢測字元編碼,得出的結果是 CP936
mb_detect_encoding($str, 'GBK, gb2312, GB18030, ISO-8859-1, ASCII, UTF-8', true)
// 我嘗試轉換此比編碼,但得出的結果還是不理想
mb_convert_encoding($str, 'UTF-8', 'CP936')
// string(24) "????驢帽魯鹵"
因為CP936和gbk, gb2312相相容,所以結果都是一樣的。
這個應該還得要你伺服器支援某種編碼,你才可以做轉換,如果不支援,你無法使用程式轉換的