[NodeJS] 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