iconv-lite: Chuyển đổi mã ký tự bằng Javascript Thuần Túy
- Không cần biên dịch mã nguồn gốc. Cài đặt nhanh chóng, hoạt động trên Windows, Web, và trong môi trường đóng gói.
- Được sử dụng trong các dự án phổ biến như Express.js (body_parser), Grunt, Nodemailer, Yeoman và các dự án khác.
- Nhanh hơn node-iconv (xem phần so sánh hiệu suất dưới đây).
- Giao diện lập trình encode/decode trực quan, bao gồm hỗ trợ Streaming.
- Sử dụng trong trình duyệt thông qua browserify hoặc webpack (~180kb sau khi nén gzip với bao gồm Buffer shim).
- Đã bao gồm Typescript type definition file.
- Hỗ trợ React Native (cần cài đặt module
stream
để bật Streaming API).
Sử dụng
Giao diện lập trình cơ bản
var iconv = require('iconv-lite');
// Convert from an encoded buffer to a js string.
str = iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');
// Convert from a js string to an encoded buffer.
buf = iconv.encode("Sample input string", 'win1251');
// Check if encoding is supported
iconv.encodingExists("us-ascii")
Giao diện lập trình Streaming
// Decode stream (from binary data stream to js strings)
http.createServer(function(req, res) {
var converterStream = iconv.decodeStream('win1251');
req.pipe(converterStream);
converterStream.on('data', function(str) {
console.log(str); // Do something with decoded strings, chunk-by-chunk.
});
});
// Convert encoding streaming example
fs.createReadStream('file-in-win1251.txt')
.pipe(iconv.decodeStream('win1251'))
.pipe(iconv.encodeStream('ucs2'))
.pipe(fs.createWriteStream('file-in-ucs2.txt'));
// Sugar: all encode/decode streams have .collect(cb) method to accumulate data.
http.createServer(function(req, res) {
req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) {
assert(typeof body == 'string');
console.log(body); // full request body string
});
});
Bảng mã được hỗ trợ
- Tất cả các bảng mã tự nhiên của node.js: utf8, ucs2 / utf16-le, ascii, binary, base64, hex.
- Bảng mã unicode bổ sung: utf16, utf16-be, utf-7, utf-7-imap, utf32, utf32-le, và utf32-be.
- Tất cả các bảng mã singlebyte phổ biến: Họ Windows 125x, Họ ISO-8859, Họ codepages IBM/DOS, Họ Macintosh, Họ KOI8, tất cả các bảng mã khác được hỗ trợ bởi thư viện iconv. Các bí danh như ‘latin1’, ‘us-ascii’ cũng được hỗ trợ.
- Tất cả các bảng mã multibyte phổ biến: CP932, CP936, CP949, CP950, GB2312, GBK, GB18030, Big5, Shift_JIS, EUC-JP.
Xem all supported encodings on wiki.
Hầu hết các bảng mã singlebyte được tạo tự động từ node-iconv. Cảm ơn Ben Noordhuis và tác giả của libiconv!
Bảng mã multibyte được tạo từ Unicode.org mappings và WHATWG Encoding Standard mappings. Cảm ơn các tác giả tương ứng!
Tốc độ mã hóa/giải mã
So sánh với module node-iconv (1000x256kb, trên MacBook Pro, Core i5/2.6 GHz, Node v0.12.0). Lưu ý: kết quả có thể thay đổi tùy thuộc vào phần cứng của bạn, vì vậy hãy luôn kiểm tra trên phần cứng của bạn.
operation iconv@2.1.4 iconv-lite@0.4.7
----------------------------------------------------------
encode('win1251') ~96 Mb/s ~320 Mb/s
decode('win1251') ~95 Mb/s ~246 Mb/s
Xử lý BOM
Cảm ơn!
* Giải mã: BOM được loại bỏ mặc định, trừ khi bị ghi đè bằng cách chuyển stripBOM: false
trong tùy chọn (ví dụ iconv.decode(buf, enc, {stripBOM: false})
). Một hàm callback cũng có thể được sử dụng như một tham số stripBOM
– nó sẽ được gọi nếu ký tự BOM thực sự được tìm thấy.
* Nếu bạn muốn phát hiện BOM UTF-8 khi giải mã các bảng mã khác, hãy sử dụng module node-autodetect-decoder-stream.
* Mã hóa: Không thêm BOM, trừ khi bị ghi đè bằng tùy chọn addBOM: true
.
Bảng mã UTF-16
Thư viện này hỗ trợ các bảng mã UTF-16LE, UTF-16BE và UTF-16. Hai bảng mã đầu tiên là đơn giản, nhưng UTF-16 cố gắng thông minh về endianness theo các cách sau:
- Giải mã: sử dụng BOM và ‘heuristic khoảng trắng’ để xác định endianness của đầu vào. Mặc định là UTF-16LE, nhưng có thể bị ghi đè bằng tùy chọn
defaultEncoding: 'utf-16be'
. Loại bỏ BOM trừ khistripBOM: false
. - Mã hóa: sử dụng UTF-16LE và mặc định ghi BOM. Sử dụng
addBOM: false
để ghi đè.
Bảng mã UTF-32
Thư viện này hỗ trợ các bảng mã UTF-32LE, UTF-32BE và UTF-32. Giống như bảng mã UTF-16 ở trên, UTF-32 mặc định là UTF-32LE, nhưng sử dụng BOM và ‘heuristic khoảng trắng’ để xác định endianness của đầu vào.
- Mặc định của UTF-32LE có thể bị ghi đè bằng tùy chọn
defaultEncoding: 'utf-32be'
. Loại bỏ BOM trừ khistripBOM: false
. - Mã hóa: sử dụng UTF-32LE và mặc định ghi BOM. Sử dụng
addBOM: false
để ghi đè. (Cũng có thể sử dụngdefaultEncoding: 'utf-32be'
ở đây để thay đổi mã hóa.)
Ghi chú khác
Khi giải mã, hãy chắc chắn cung cấp một Buffer cho phương thức decode(), nếu không bad things usually happen.
Ký tự không thể dịch chuyển sẽ được đặt thành � hoặc ?. Hiện không hỗ trợ dịch chuyển.
Phiên bản Node 0.10.31 và 0.11.13 có lỗi, không sử dụng chúng (xem #65, #77).
Kiểm tra
$ git clone git@github.com:ashtuchkin/iconv-lite.git
$ cd iconv-lite
$ npm install
$ npm test
$ # To view performance:
$ node test/performance.js
$ # To view test coverage:
$ npm run coverage
$ open coverage/lcov-report/index.html
Thông tin tải về:
Tác giả: ashtuchkin
Mã nguồn: https://github.com/ashtuchkin/iconv-lite
Giấy phép: MIT license