目前Node.js僅支持hex、utf八、ascii、binary、base6四、ucs2幾種編碼的轉換。對於GBK,GB2312等編碼,Nodejs自帶的toString()方法不支持,所以中文轉化的時候須要加載第三方庫,主要有兩個編碼轉換庫iconv-lite和encoding,我的推薦使用encoding。node
iconv-lite:是 iconv 的純 js 實現,支持的編碼包括 node.js 原生編碼:utf8, ucs2, ascii, binary, base64;同時支持普遍使用的單字節編碼:Windows 125x family, ISO-8859 family, IBM/DOS codepages, Macintosh family, KOI8 family, latin1, us-ascii;多字節編碼:gbk, gb2313, Big5, cp950。npm
encoding:是對 node-iconv 和 iconv-lite 的再次封裝,encoding 首先調用 node-iconv,若是 node-iconv 沒法解析,則調用 iconv-lite 做爲替代方案。ui
encoding 安裝使用編碼
1. 安裝spa
npm install encoding
2.使用code
encoding 模塊就一個方法 convert(),使用方法爲:encoding.convert(text, toCharset, fromCharset)。對象
轉換後的結果爲 Buffer 對象。blog
1 var encoding = require('encoding'); 2 3 var result = encoding.convert("ÕÄÖÜ", "Latin_1"); 4 console.log(result); //<Buffer d5 c4 d6 dc>
下面用實例來講明encoding的使用方法:ci
1.UTF8轉GBKit
例如"蘇A00001"的GBK的對應形式爲"CBD5413030303031".
1 var fs = require('fs'); 2 var encodingConvert = require('encoding'); 3 var buf = require('buffer'); 4 var temp = "蘇A00001"; 5 var result = new String(); 6 7 var resultBuffer = encodingConvert.convert(temp, "GBK","UTF8"); 8 console.log("The resultBuffer is:",resultBuffer); 9 10 for(var i = 0;i < resultBuffer.length;i++) 11 { 12 13 result+=resultBuffer.slice(i,i+1)[0].toString(16); 14 15 } 16 result = result.toUpperCase(); 17 18 console.log("The result is:",result);
即第8行的resultBuffer是一個buffer,其內容就是對應的"CBD5413030303031",只不過要經過第16行進行大寫轉化。
第13行的做用就是取Buffer的每一位,resultBuffer.slice(i)的結果爲<Buffer cb>,<Buffer d5>,<Buffer 41>,<Buffer 30>,<Buffer 30>,<Buffer 30>,<Buffer 30>,<Buffer 31>.
resultBuffer.slice(i)[0]的結果爲203,213,65,48,48,48,48,49,因爲Buffer裏的是二進制,此結果就是二進制對應的十進制結果,再把其轉化成16進制就是最後的結果。
2.GBK轉UTF8
1 var fs = require('fs'); 2 var encodingConvert = require('encoding'); 3 var buf = require('buffer'); 4 5 var temp = "CBD5413030303031"; 6 var bufferArray = [0xcb,0xd5,0x41,0x30,0x30,0x30,0x30,0x31]; 7 var buffer = new Buffer(bufferArray); 8 console.log("The buffer is:",buffer); 9 console.log(buffer.toString()); 10 11 var plateDecoded = encodingConvert.convert(buffer, "UTF8", "GBK"); 12 13 console.log("The result is:",plateDecoded.toString());
從結果能夠得出,若是不使用第11行的代碼,則輸出的中文是亂碼,那是由於"CBD5413030303031"是GBK格式的編碼格式,通過第11行的轉化,轉化成UTF8編碼,再進行輸出的結果是正確的格式。