解決GB2312 GBK UTF 8轉換問題

2021-08-25 14:24:08 字數 1039 閱讀 6878

gb2312:資訊交換用漢字編碼字符集(不支援生僻字的字符集,這是其本身限制的問題)。

gbk:漢字編碼字符集,向下與gb2312相容(支援生僻字的字符集)。

utf-8:是一種針對unicode的可變長度字元編碼,又稱萬國碼。

現在手上乙個專案正在上傳基礎資料,客戶反饋某資料上傳失敗,我研究之後發現是客戶上傳的資料中「蘴」字導致的。可能之前code時沒有注意生僻字轉換的問題。

問題**:

$data[$i] = iconv('gb2312', 'utf-8', $temp);    //iconv(原編碼, 目標編碼, 要轉的字串)
這行**本身沒有錯誤,轉換非生僻字也不會出錯,但因生僻字「蘴」字的原因轉換失敗,轉換為「false」。

然後網上找類似問題,但發現根據如下網上的答案並沒有從根本上解決這個問題:

$data[$i] = iconv('gb2312', 'utf-8//ignore', $temp);
加上「//ignore」會讓iconv()函式忽略錯誤,繼續執行。

但轉換為「某某縣某某田園t農業科技****」,此方法只是「壓制」錯誤,將「蘴」錯誤的轉換為「t」。

此函式不行,那就換乙個函式:

$data[$i] = mb_convert_encoding($temp, 'utf-8', 'gb2312');    //mb_convert_encoding(要轉的字串, 目標編碼, 原編碼)
轉換為「連平縣鴻益田園?農業科技****」,此方法與上面函式相同,只是「壓制」錯誤,將「蘴」錯誤的轉換為「?」

此時,我才意識到,不是函式的問題,是編碼的問題:gb2312是不支援生僻字的。

果然,將編碼換了一下這個問題就解決了:

$data[$i] = mb_convert_encoding($temp, 'utf-8', 'gbk');
轉換為「某某縣某某田園蘴農業科技****」,轉換成功。

吃一塹長一智,提醒自己這麼「弱智」的問題要牢記!!!

字元編碼GB2312 GBK UTF 8的區別

utf8是國際編碼,它的通用性比較好,外國人也可以瀏覽論壇 gbk是國家編碼,通用性比utf8差,不過utf8占用的資料庫比gbk大 gbk版本與utf 8版本功能是一樣的 只不過編碼方式不同。gbk的文字編碼是雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,只不過為區分中文,將其最高位都...

字元編碼GB2312 GBK UTF 8的區別

utf8是國際編碼,它的通用性比較好,外國人也可以瀏覽論壇 gbk是國家編碼,通用性比utf8差,不過utf8占用的資料庫比gbk大 gbk版本與utf 8版本功能是一樣的 只不過編碼方式不同。gbk的文字編碼是雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,只不過為區分中文,將其最高位都...

字元編碼 GB2312 GBK UTF 8 區別

utf8是國際編碼,它的通用性比較好,外國人也可以瀏覽論壇 gbk是國家編碼,通用性比utf8差,不過utf8占用的資料庫比gbk大 gbk版本與utf 8版本功能是一樣的 只不過編碼方式不同。gbk的文字編碼是雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,只不過為區分中文,將其最高位都...