GB系编码如何转换utf-8

WBOY
發布: 2016-06-23 14:22:19
原創
1112 人瀏覽過

编码 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相兼容,所以结果都是一样的。
这个应该还得要你服务器支持某种编码,你才可以做转换,如果不支持,你无法使用程序转换的

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板