Spaces:
Running
Running
| ; | |
| var iconvLite = require('iconv-lite'); | |
| // 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 | |
| * @return {Buffer} Encoded string | |
| */ | |
| function convert(str, to, from) { | |
| from = checkEncoding(from || 'UTF-8'); | |
| to = checkEncoding(to || 'UTF-8'); | |
| str = str || ''; | |
| var result; | |
| if (from !== 'UTF-8' && typeof str === 'string') { | |
| str = Buffer.from(str, 'binary'); | |
| } | |
| if (from === to) { | |
| if (typeof str === 'string') { | |
| result = Buffer.from(str); | |
| } else { | |
| result = str; | |
| } | |
| } else { | |
| try { | |
| result = convertIconvLite(str, to, from); | |
| } catch (E) { | |
| console.error(E); | |
| result = str; | |
| } | |
| } | |
| if (typeof result === 'string') { | |
| result = Buffer.from(result, 'utf-8'); | |
| } | |
| return result; | |
| } | |
| /** | |
| * 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(); | |
| } | |