2012-11-19 13 views
5

मैं NodeJS के साथ एक webpage से कुछ स्क्रैप डेटा कोशिश कर रहा हूँ के साथ विंडोज़ -1250 इनकोडिंग वेब पेज से सही स्ट्रिंग हो रही है, लेकिन मैं वर्ण एन्कोडिंग के साथ समस्या हो रहा हूँ। वेब पेज कहा गया है कि यह एन्कोडिंग है: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> और जब मैं क्रोम के साथ यह ब्राउज़ करने के लिए यह विंडोज़ -1250 एन्कोडिंग सेट करता है और सब कुछ ठीक लग रहा है।Node.js

चूंकि नोड में स्ट्रीम के लिए कोई विंडोज -1250 एन्कोडिंग/डिकोडिंग नहीं है (और utf8 काम नहीं करता है), मुझे एक आइकनव-लाइट पैकेज मिला जो विभिन्न एन्कोडिंग के बीच आसानी से परिवर्तित करने में सक्षम होना चाहिए। लेकिन मैं अभी भी गलत वर्ण मैं एक फ़ाइल में प्रतिक्रिया (या कंसोल में उत्पादन) को बचाने के बाद मिलता है। मैं भी अलग एनकोडिंग, देशी नोड बफर एन्कोडिंग की कोशिश की, मैं क्या क्रोम (Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3) में देखते हैं लेकिन कुछ भी सही ढंग से काम करने लगता है के रूप में ही करने के लिए शीर्ष लेख की स्थापना।

आप यहाँ https://gist.github.com/4110999 में पूरे कोड देख सकते हैं।

मैं मैं कुछ मौलिक कैसे एन्कोडिंग तो काम करता है सही पात्रों के साथ डेटा प्राप्त करने के तरीके के बारे में किसी भी मदद की सराहना की होगी के बारे में याद आ रही है लगता है।

संपादित करें:
इसके अलावा नोड iconv पैकेज के मामले में यह एक पैकेज समस्या यह है की कोशिश की।

var decoder = new Iconv_native('WINDOWS-1250', 'UTF-8'); 
var decoded = decoder.convert(body).toString(); 

लेकिन अभी भी एक ही परिणाम हो रही है: करने के लिए लाइन 51 बदल दिया है।

उत्तर

1

मैं iconv-लाइट पैकेज से परिचित नहीं हूँ, लेकिन यह माध्यम से देख कोड है, यह है जैसे आप windows1250 के बजाय win1250 का उपयोग करना होगा लग रहा है (here देखें)

एनकोडिंग a hash के रूप में देखा जाता है ।

इसके अलावा, रीडमी 'windows1251' के स्थान पर इस कोड का उपयोग करता है:

str = iconv.decode(buf, 'win1251'); 
+0

हाय, मैं भी कोड के माध्यम से चला गया और ऐसा लगता है कि एन्कोडिंग समानार्थक शब्द के रूप में आयोजित किया जाता है ताकि 1250 == win1250 == windows1250। मुझे लगता है कि वैसे भी करने की कोशिश की और यह एक ही परिणाम देता है। win1251 या तो काम नहीं करता है, परिणाम अलग है, लेकिन गैर ASCII वर्ण अभी भी निरर्थक शब्द हैं। – aocenas

0

मुझे लगता है, आप स्ट्रिंग परिवर्तित कर रहे हैं, लेकिन आप परिवर्तित करना होगा एक कच्चे बाइट्स! हैं (आप वेब से कुछ पढ़ रहे हैं, आप द्विआधारी के रूप में यह अवश्य पढ़ें) डिस्क से जीत-1250 में पढ़ने फ़ाइल

उदाहरण:

var Buffer = require('buffer').Buffer; 
var Iconv = require('iconv').Iconv; 

//without options (encoding is not specified), 'fs' reads as raw bytes. 
var bytes= fs.readFileSync('myFile.txt'); 
//this is bad: var myBadString = fs.readFileSync('myFile.txt', { encoding: "UTF-8" }); 

var buf = new Buffer(bytes, 'binary'); 
var translated = new Iconv('CP1250', 'UTF8').convert(buf).toString();