pax_global_header00006660000000000000000000000064126364617710014527gustar00rootroot0000000000000052 comment=91ae950aaa854a119122c27cdbabd8c5585106f7 encoding-0.1.12/000077500000000000000000000000001263646177100133765ustar00rootroot00000000000000encoding-0.1.12/.gitignore000066400000000000000000000000141263646177100153610ustar00rootroot00000000000000node_modulesencoding-0.1.12/.travis.yml000066400000000000000000000007711263646177100155140ustar00rootroot00000000000000language: node_js sudo: false node_js: - "0.10" - 0.12 - iojs - 4 - 5 env: - CXX=g++-4.8 addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.8 notifications: email: - andris@kreata.ee webhooks: urls: - https://webhooks.gitter.im/e/0ed18fd9b3e529b3c2cc on_success: change # options: [always|never|change] default: always on_failure: always # options: [always|never|change] default: always on_start: false # default: false encoding-0.1.12/LICENSE000066400000000000000000000016471263646177100144130ustar00rootroot00000000000000Copyright (c) 2012-2014 Andris Reinman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. encoding-0.1.12/README.md000066400000000000000000000025601263646177100146600ustar00rootroot00000000000000# Encoding **encoding** is a simple wrapper around [node-iconv](https://github.com/bnoordhuis/node-iconv) and [iconv-lite](https://github.com/ashtuchkin/iconv-lite/) to convert strings from one encoding to another. If node-iconv is not available for some reason, iconv-lite will be used instead of it as a fallback. [![Build Status](https://secure.travis-ci.org/andris9/encoding.svg)](http://travis-ci.org/andris9/Nodemailer) [![npm version](https://badge.fury.io/js/encoding.svg)](http://badge.fury.io/js/encoding) ## Install Install through npm npm install encoding ## Usage Require the module var encoding = require("encoding"); Convert with encoding.convert() var resultBuffer = encoding.convert(text, toCharset, fromCharset); Where * **text** is either a Buffer or a String to be converted * **toCharset** is the characterset to convert the string * **fromCharset** (*optional*, defaults to UTF-8) is the source charset Output of the conversion is always a Buffer object. Example var result = encoding.convert("ÕÄÖÜ", "Latin_1"); console.log(result); // ## iconv support By default only iconv-lite is bundled. If you need node-iconv support, you need to add it as an additional dependency for your project: ..., "dependencies":{ "encoding": "*", "iconv": "*" }, ... ## License **MIT** encoding-0.1.12/lib/000077500000000000000000000000001263646177100141445ustar00rootroot00000000000000encoding-0.1.12/lib/encoding.js000066400000000000000000000061141263646177100162720ustar00rootroot00000000000000'use strict'; var iconvLite = require('iconv-lite'); // Load Iconv from an external file to be able to disable Iconv for webpack // Add /\/iconv-loader$/ to webpack.IgnorePlugin to ignore it var Iconv = require('./iconv-loader'); // Expose to the world module.exports.convert = convert; /** * Convert encoding of an UTF-8 string or a buffer * * @param {String|Buffer} str String to be converted * @param {String} to Encoding to be converted to * @param {String} [from='UTF-8'] Encoding to be converted from * @param {Boolean} useLite If set to ture, force to use iconvLite * @return {Buffer} Encoded string */ function convert(str, to, from, useLite) { from = checkEncoding(from || 'UTF-8'); to = checkEncoding(to || 'UTF-8'); str = str || ''; var result; if (from !== 'UTF-8' && typeof str === 'string') { str = new Buffer(str, 'binary'); } if (from === to) { if (typeof str === 'string') { result = new Buffer(str); } else { result = str; } } else if (Iconv && !useLite) { try { result = convertIconv(str, to, from); } catch (E) { console.error(E); try { result = convertIconvLite(str, to, from); } catch (E) { console.error(E); result = str; } } } else { try { result = convertIconvLite(str, to, from); } catch (E) { console.error(E); result = str; } } if (typeof result === 'string') { result = new Buffer(result, 'utf-8'); } return result; } /** * Convert encoding of a string with node-iconv (if available) * * @param {String|Buffer} str String to be converted * @param {String} to Encoding to be converted to * @param {String} [from='UTF-8'] Encoding to be converted from * @return {Buffer} Encoded string */ function convertIconv(str, to, from) { var response, iconv; iconv = new Iconv(from, to + '//TRANSLIT//IGNORE'); response = iconv.convert(str); return response.slice(0, response.length); } /** * Convert encoding of astring with iconv-lite * * @param {String|Buffer} str String to be converted * @param {String} to Encoding to be converted to * @param {String} [from='UTF-8'] Encoding to be converted from * @return {Buffer} Encoded string */ function convertIconvLite(str, to, from) { if (to === 'UTF-8') { return iconvLite.decode(str, from); } else if (from === 'UTF-8') { return iconvLite.encode(str, to); } else { return iconvLite.encode(iconvLite.decode(str, from), to); } } /** * Converts charset name if needed * * @param {String} name Character set * @return {String} Character set name */ function checkEncoding(name) { return (name || '').toString().trim(). replace(/^latin[\-_]?(\d+)$/i, 'ISO-8859-$1'). replace(/^win(?:dows)?[\-_]?(\d+)$/i, 'WINDOWS-$1'). replace(/^utf[\-_]?(\d+)$/i, 'UTF-$1'). replace(/^ks_c_5601\-1987$/i, 'CP949'). replace(/^us[\-_]?ascii$/i, 'ASCII'). toUpperCase(); } encoding-0.1.12/lib/iconv-loader.js000066400000000000000000000004221263646177100170620ustar00rootroot00000000000000'use strict'; var iconv_package; var Iconv; try { // this is to fool browserify so it doesn't try (in vain) to install iconv. iconv_package = 'iconv'; Iconv = require(iconv_package).Iconv; } catch (E) { // node-iconv not present } module.exports = Iconv; encoding-0.1.12/package.json000066400000000000000000000007171263646177100156710ustar00rootroot00000000000000{ "name": "encoding", "version": "0.1.12", "description": "Convert encodings, uses iconv by default and fallbacks to iconv-lite if needed", "main": "lib/encoding.js", "scripts": { "test": "nodeunit test" }, "repository": "https://github.com/andris9/encoding.git", "author": "Andris Reinman", "license": "MIT", "dependencies": { "iconv-lite": "~0.4.13" }, "devDependencies": { "iconv": "~2.1.11", "nodeunit": "~0.9.1" } } encoding-0.1.12/test/000077500000000000000000000000001263646177100143555ustar00rootroot00000000000000encoding-0.1.12/test/test.js000066400000000000000000000053151263646177100156760ustar00rootroot00000000000000'use strict'; var Iconv = require('../lib/iconv-loader'); var encoding = require('../lib/encoding'); exports['General tests'] = { 'Iconv is available': function (test) { test.ok(Iconv); test.done(); }, 'From UTF-8 to Latin_1 with Iconv': function (test) { var input = 'ÕÄÖÜ', expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]); test.deepEqual(encoding.convert(input, 'latin1'), expected); test.done(); }, 'From Latin_1 to UTF-8 with Iconv': function (test) { var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]), expected = 'ÕÄÖÜ'; test.deepEqual(encoding.convert(input, 'utf-8', 'latin1').toString(), expected); test.done(); }, 'From UTF-8 to UTF-8 with Iconv': function (test) { var input = 'ÕÄÖÜ', expected = new Buffer('ÕÄÖÜ'); test.deepEqual(encoding.convert(input, 'utf-8', 'utf-8'), expected); test.done(); }, 'From Latin_13 to Latin_15 with Iconv': function (test) { var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xd0]), expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xA6]); test.deepEqual(encoding.convert(input, 'latin_15', 'latin13'), expected); test.done(); }, 'From ISO-2022-JP to UTF-8 with Iconv': function (test) { var input = new Buffer('GyRCM1g5OzU7PVEwdzgmPSQ4IUYkMnFKczlwGyhC', 'base64'), expected = new Buffer('5a2m5qCh5oqA6KGT5ZOh56CU5L+u5qSc6KiO5Lya5aCx5ZGK', 'base64'); test.deepEqual(encoding.convert(input, 'utf-8', 'ISO-2022-JP'), expected); test.done(); }, 'From UTF-8 to Latin_1 with iconv-lite': function (test) { var input = 'ÕÄÖÜ', expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]); test.deepEqual(encoding.convert(input, 'latin1', false, true), expected); test.done(); }, 'From Latin_1 to UTF-8 with iconv-lite': function (test) { var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]), expected = 'ÕÄÖÜ'; test.deepEqual(encoding.convert(input, 'utf-8', 'latin1', true).toString(), expected); test.done(); }, 'From UTF-8 to UTF-8 with iconv-lite': function (test) { var input = 'ÕÄÖÜ', expected = new Buffer('ÕÄÖÜ'); test.deepEqual(encoding.convert(input, 'utf-8', 'utf-8', true), expected); test.done(); }, 'From Latin_13 to Latin_15 with iconv-lite': function (test) { var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xd0]), expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xA6]); test.deepEqual(encoding.convert(input, 'latin_15', 'latin13', true), expected); test.done(); } };