GBK和UTF-8編碼的轉換是一個非常惡心的事情
2021-07-20
原文鏈接:
GBK和UTF-8編碼之間的轉換是一件很惡心的事情。例如,在 PHP 中編碼轉換 php編碼轉換 php,它根本不支持 GBK 編碼。可以支持編碼轉換的庫函數(shù)有兩個,通常能想到的函數(shù)就是函數(shù),用起來也很爽:
iconv('GBK', 'UTF-8//IGNORE', '芒果小站'); // 將字符串由 GBK 編碼轉換為 UTF-8 編碼
但只能解決編碼提前已知的情況。如果字符串的編碼未知,則需要先檢測其編碼。在這種情況下,您可以使用擴展庫:
mb_detect_encoding('芒果小站');
但是有一個缺陷,經(jīng)常有不準確的判斷。也許這可以解決:
// 使用 iconv 轉換并判斷是否等值,效率不高 function is_utf8 ($str) { if ($str === iconv('UTF-8', 'UTF-8//IGNORE', $str)) { return 'UTF-8'; } } // 多種編碼的情況 function detect_encoding ($str) { foreach (array('GBK', 'UTF-8') as $v) { if ($str === iconv($v, $v . '//IGNORE', $str)) { return $v; } } }
通過上述方法得到字符串編碼信息后,可以使用 或 進行編碼轉換。