एनकोड की सूची जो Node.js का समर्थन करती है


136

मुझे एक फाइल पढ़ने की ज़रूरत है जो ISO-8859-1 (जिसे लैटिन 1 भी कहा जाता है) के साथ एनकोड किया गया है, कुछ इस तरह:

var file_contents = fs.readFileSync("test_data.html", "latin1");

हालांकि, नोड को "लैटिन 1" या "आईएसओ-8859-1" के बारे में शिकायत है कि यह वैध एन्कोडिंग नहीं है ("त्रुटि: अज्ञात एन्कोडिंग)"।

क्या एनकोडिंग readFileSyncस्वीकार करता है ?


मुझे नहीं पता कि यह स्रोत फ़ाइल को utf8 में बदलने का विकल्प है या नहीं। यदि हां, तो यहां एक लिंक है। superuser.com/questions/762473/ansi-to-utf-8-in-notepad
mathheadinclouds

जवाबों:


223

नोड को मूल रूप से समर्थन करने वाले एन्कोडिंग की सूची कम है:

  • ascii
  • बेस 64
  • हेक्स
  • UCS2 / UCS2 / utf16le / utf16le
  • UTF8 / UTF8
  • बाइनरी / लैटिन 1 (ISO8859-1, लैटिन 1 केवल नोड 6.4.0+ में)

यदि आप 6.4.0 से अधिक पुराने संस्करण का उपयोग कर रहे हैं, या गैर-यूनिकोड एनकोडिंग के साथ सौदा नहीं करना चाहते हैं, तो आप निम्नलिखित को फिर से पढ़ सकते हैं:

फ़ाइलों को पुनः लोड करने के लिए iconv-lite का उपयोग करें :

var iconvlite = require('iconv-lite');
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    return iconvlite.decode(content, encoding);
}

वैकल्पिक रूप से, iconv का उपयोग करें :

var Iconv = require('iconv').Iconv;
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    var iconv = new Iconv(encoding, 'UTF-8');
    var buffer = iconv.convert(content);
    return buffer.toString('utf8');
}

1
Iconv संकलित करने की समस्या वाले लोगों के लिए, मैं iconv-lite की सलाह देता हूं । यह संकलन की आवश्यकता नहीं है और देव के अनुसार iconv की तुलना में तेज है और इसका इस्तेमाल ग्रंट, नोदेमैलर, येओमान जैसे लोकप्रिय साधनों द्वारा किया जाता है ...
Telémako

इलेक्ट्रॉन के साथ उपयोग करने के लिए लिब स्थापित करें और उत्पादन निर्भरता के रूप में सहेजें:npm install iconv-lite --save
डेनिसकोलोडिन

अभी के लिए, latin1उर्फ के रूप में भी शामिल किया गया हैascii
थिब्जी

2
आपने उत्तर में जो कहा है - वह ISO-8859-1 (उर्फ latin1) समर्थित नहीं है - नोड v.1.1.4 के लिए मामला नहीं है। देखें इस दस्तावेज़ पेज जिसमें शामिल बफर द्वारा समर्थित सभी एनकोडिंग, देखने के लिए latin1(जिसका नाम है binary)।
nbkhope

1
@PanuLogic जब आप बाइट स्ट्रिंग से कैरेक्टर स्ट्रिंग में परिवर्तित करते हैं, तो आपको कुछ एन्कोडिंग की आवश्यकता होती है । latin1प्रतिवर्ती है - भले ही आपका इनपुट एक mp4 वीडियो फ़ाइल है, स्ट्रिंग मान्य (यद्यपि अर्थहीन) होने वाली है, और बाइट्स में वापस कनवर्ट करने से मूल बाइट्स मिलेंगे। बाइनरी डेटा के लिए a Buffer/ का प्रयोग करें Uint8Array
फ़िहाग

0

यदि उपरोक्त समाधान आपके लिए काम नहीं करता है तो निम्नलिखित शुद्ध नोड्ज कोड के साथ एक ही परिणाम प्राप्त करना संभव हो सकता है। उपर्युक्त ने मेरे लिए काम नहीं किया और इसके परिणामस्वरूप एक अपवाद को छोड़कर जब OSX पर 'npm install iconv' चल रहा था:

npm install iconv

npm WARN package.json portalServer@0.1.0 No README.md file found!
npm http GET https://registry.npmjs.org/iconv
npm http 200 https://registry.npmjs.org/iconv
npm http GET https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz
npm http 200 https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz

> iconv@2.0.4 install /Users/markboyd/git/portal/app/node_modules/iconv
> node-gyp rebuild

gyp http GET http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz
xcode-select: Error: No Xcode is selected. Use xcode-select -switch <path-to-xcode>, or see the xcode-select manpage (man xcode-select) for further information.

यदि कोई एन्कोडिंग निर्दिष्ट नहीं है, तो fs.readFileSync () एक बफर लौटाता है। और बफ़र में एक toString () विधि है जो UTF8 में बदल जाएगी यदि कोई एन्कोडिंग आपको फ़ाइल की सामग्री देने के लिए निर्दिष्ट नहीं है। नोडज प्रलेखन देखें। इसने मेरे लिए काम किया।


1
समस्या यह है कि बफ़र मानता है कि डेटा पहले से ही utf8 में था यदि निर्दिष्ट नहीं किया गया है, और यह लैटिन 1 से utf8 में बदलने का कोई प्रयास नहीं करेगा।
ब्लूसमून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.