From 696be8a260a9988caba0092bb5a734a96ff9bf58 Mon Sep 17 00:00:00 2001 From: Alexander Shtuchkin Date: Fri, 6 Apr 2018 21:19:17 -0700 Subject: [PATCH] Fix encoding canonicalization (fixes #156) --- lib/index.js | 7 ++++++- test/main-test.js | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index 728fe2b..5391919 100644 --- a/lib/index.js +++ b/lib/index.js @@ -65,7 +65,7 @@ iconv.getCodec = function getCodec(encoding) { iconv.encodings = require("../encodings"); // Lazy load all encoding definitions. // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. - var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, ""); + var enc = iconv._canonicalizeEncoding(encoding); // Traverse iconv.encodings to find actual codec. var codecOptions = {}; @@ -108,6 +108,11 @@ iconv.getCodec = function getCodec(encoding) { } } +iconv._canonicalizeEncoding = function(encoding) { + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); +} + iconv.getEncoder = function getEncoder(encoding, options) { var codec = iconv.getCodec(encoding), encoder = new codec.encoder(options, codec); diff --git a/test/main-test.js b/test/main-test.js index b71a2f5..542b275 100644 --- a/test/main-test.js +++ b/test/main-test.js @@ -84,3 +84,13 @@ describe("Generic UTF8-UCS2 tests", function() { assert.strictEqual(iconv.encode("外国人", "latin1").toString(), "???"); }); }); + +describe("Canonicalize encoding function", function() { + it("works with numbers directly", function() { + assert.equal(iconv._canonicalizeEncoding(955), "955"); + }); + + it("correctly strips year and non-alpha chars", function() { + assert.equal(iconv._canonicalizeEncoding("ISO_8859-5:1988"), "iso88595"); + }); +});