Node.js 編碼轉換


Node.js自帶的toString()方法不支持gbk,因此中文轉換的時候需要加載第三方庫,推薦以下兩個編碼轉換庫,iconv-lite和encoding。

 
 
 
iconv, iconv-lite和encoding是什么?
 
 
 
iconv:是在類Unix系統中一種標准字符集轉換接口,用於在不同字符集編碼之間進行轉換,最早出現在HP-UX系統中。
 
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。官方宣稱比node-iconv更快。
 
encoding:是對node-iconv和iconv-lite的再次封裝,encoding首先調用node-iconv,如果node-iconv無法解析,則調用iconv-lite作為替代方案。
 
 
 
iconv-lite安裝使用
 
 
 
1. 安裝
 
$ npm install iconv-lite
 
 
2. 使用
 
var iconv = require('iconv-lite');
 
// Convert from an encoded buffer to js string.
str = iconv.decode(buf, 'win1251');
 
// Convert from js string to an encoded buffer.
buf = iconv.encode("Sample input string", 'win1251');
 
// Check if encoding is supported
iconv.encodingExists("us-ascii")
復制代碼
 
 
3. iconv-lite和node-iconv的性能對比
 
operation             iconv@1.2.4   iconv-lite@0.2.4 
----------------------------------------------------------
encode('win1251')     ~115 Mb/s     ~230 Mb/s
decode('win1251')     ~95 Mb/s      ~130 Mb/s
 
 
encoding安裝使用
 
 
 
1. 安裝
 
$ npm install encoding
 
 
2. 使用
 
encoding模塊就一個方法convert(),使用方法為:encoding.convert(text, toCharset, fromCharset)。
 
text: 需要轉換的對象,可以為Buffer或者String對象。
toCharset: 轉換后的編碼。
fromCharset: 轉換前的編碼,缺省為uft8。
轉換后的輸入結果為Buffer對象。
 
var encoding = require('encoding');
 
var result = encoding.convert("ÕÄÖÜ", "Latin_1");
console.log(result); //<Buffer d5 c4 d6 dc>
 
 
番外篇:jschardet
 
 
 
什么是jschardet?
 
jschardet是由António Afonso從Python的chardet移植到 Javascript的jschardet。
 
 
 
1. 安裝
 
$ npm install jschardet
 
 
2. 使用
 
 
var jschardet = require("jschardet")
 
// "àíàçã" in UTF-8
jschardet.detect("\xc3\xa0\xc3\xad\xc3\xa0\xc3\xa7\xc3\xa3")
// { encoding: "utf-8", confidence: 0.9690625 }
 
// "次常用國字標準字體表" in Big5 
jschardet.detect("\xa6\xb8\xb1\x60\xa5\xce\xb0\xea\xa6\x72\xbc\xd0\xb7\xc7\xa6\x72\xc5\xe9\xaa\xed")
// { encoding: "Big5", confidence: 0.99 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM