node.js實現編碼轉GBK轉UTF8

在做這些之前遇見了一個需求,則是用node去做一個姓名的模糊查詢。其實這是一個簡單再也不能簡單的事情,可是卻在這個問題上卡了兩天。
因爲業務需要,給新功能做一個模糊查詢。
首先,我得搭建了一個node的http服務,然後我配置了mysql。建立了ORM模型後,準備開始編寫sql語句的時候遇見了一個奇怪的事情,由於我的node是utf8的編碼。但是我們公司的數據庫採用的是GBK的編碼,因此導致我在進行數據查詢的時候出現了錯誤,查詢失敗,原因就是因爲編碼問題導致。
這問題也很簡單,轉碼唄!!!

開始百度node的轉碼方法在這裏就遇見了iconv-jschardet這個插件,於是去npm了一下。開始使用

const iconv = require('iconv-jschardet');
SarchName =  iconv.encode(SarchName, 'gbk');

把前端送上來的字符轉成GBK的編碼,很開心。

結果還是報錯了。因爲這個錯誤,我找了一下午。也不知道轉成功了沒有,於是試了無數種辦法還是無法解決這個編碼問題,於是想到了之前在寫PHP的時候查詢的時候用SQL轉成二進制進行模糊匹配。
於是我typeof了一下SarchName居然是Obj我就很納悶了應該是String於是輸出打印了一下,一看是個Buffer。這下明白了原來沒有直接轉成String那好,我就用Buffer.toString()方法結果還是不行,然後翻了一下文檔。發現沒有GBK的編碼,這下就頭大了。
在這裏插入圖片描述

然後我試了試ascii發現還是不行,於是我試了一下binary結果ok了。

在這裏插入圖片描述

**模糊查詢執行完成沒問題了,在返回的數據的時候發現都還是GBK編碼。那簡單啊!!!!那就轉成utf8

Name =  iconv.decode(name,'gbk')

然後返回發現沒問題,那ok完成了。
沒過一會別人就測出bug說人的名字沒有顯示完全!!!!
結果有的人的名字出現了這個符號�。。。。。
百度發現說解碼不全,暫無任何解決方法。。。
最後沒辦法只能用了indexOf('�')方法去檢索字符串中出現生僻字
然後記錄其狀態再用PHP進行轉碼。
總之一個字,坑!
**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章