GB系編碼如何轉換utf-8

來源:互聯網
上載者:User
編碼 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相相容,所以結果都是一樣的。
這個應該還得要你伺服器支援某種編碼,你才可以做轉換,如果不支援,你無法使用程式轉換的

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.