2015-07-22 9 views
6

मैं राम-राम के साथ मेरा अनुरोध इस तरह पार्स:Node.js बंदगी पार्सर टूट जाता है UTF-8 एन्कोडिंग

var url = http://shop.nag.ru/catalog/16939.IP-videonablyudenie-OMNY/16944.IP-kamery-OMNY-c-vario-obektivom/16704.OMNY-1000-PRO; 
request.get(url, function (err, response, body) { 
    console.log(body); 
    $ = cheerio.load(body); 
    console.log($(".description").html()); 
}); 

और आउटपुट के रूप में मैं लेकिन अपठनीय अजीब एन्कोडिंग में सामग्री को देखने के:

//Plain body console.log(body) (p.s. russian chars): 
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1><p style 

// cheerio's console.log $(".description").html() 
<h1><span style="font-size: 16px;">&#x423;&#x43B;&#x438;&#x447;&#x43D;&#x430;&#x44F; 3&#x41C;&#x43F; IP HD &#x43A;&#x430;&#x43C;&#x435;&#x440;&#x430; OMNY 

लक्ष्य यूआरएल लिंक कोडिंग यूटीएफ -8 प्रारूप में है। तो क्यों चेरीओ मेरे एन्कोडिंग तोड़ता है?

iconv उपयोग करने के लिए अपने शरीर प्रतिक्रिया सांकेतिक शब्दों में बदलना करने के लिए कोशिश कर रहा है:

var body1 = iconv.decode(body, "utf-8"); 

लेकिन console.log($(".description").html()); अभी भी अजीब पाठ देता है।

+0

जांच के संबंध में यह प्रतिक्रिया एन्कोडिंग के साथ काम करने के लिए : http:/

हालांकि, अगर आप unencoded पाठ प्राप्त करना चाहते हैं, तो आप decodeEntities विकल्प false करने के लिए सेट कर सकते हैं /stackoverflow.com/questions/23805566/weird-characters-when-using-console-print-cheerio-nodejs – snozza

+0

नहीं, अभी भी वही परिणाम :( – MeetJoeBlack

उत्तर

17

चेरीओ ने कुछ भी तोड़ा नहीं है। HTML आउटपुट को किसी भी ब्राउज़र द्वारा HTML इनपुट के समान ही प्रदान किया जाएगा। इस स्निपेट पर एक नज़र डालें:

<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1> 
 

 
<h1><span style="font-size: 16px;">&#x423;&#x43B;&#x438;&#x447;&#x43D;&#x430;&#x44F; 3&#x41C;&#x43F; IP HD &#x43A;&#x430;&#x43C;&#x435;&#x440;&#x430; OMNY - &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x443;&#x439;&#x442;&#x435; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x43B;&#x443;&#x447;&#x448;&#x435;</span></h1>

यह केवल मामला है कि &#x423; UTF-8 वर्ण У के लिए HTML "इकाई" है, उसी तरह इकाई &gt;> का प्रतिनिधित्व करता है।

const $ = cheerio.load(
 
    `<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>`, 
 
    { decodeEntities: false } 
 
); 
 

 

 
console.log($('span').html()) 
 
// => Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше
.as-console-wrapper{min-height:100%}
<script src="https://wzrd.in/standalone/[email protected]"></script>

+2

Thx, {decodeEntities: false} ठीक काम करता है! – MeetJoeBlack

+0

इससे बचें गंदगी और # xFEFF भी; चेरीओ आउटपुट, thx में चार जोड़ा गया। –

+0

धन्यवाद! आपका समाधान गल्प-चीरियो के लिए भी काम करता है। मैंने अभी इस विकल्प का उपयोग किया है: gulp.src ("./ mysrc") .pipe (cheerio ({ रन: फ़ंक्शन ($, फ़ाइल) { // यहां कुछ करें ... }, पार्सरऑप्शन: { xmlMode: true, डीकोडइन्टिटीज: झूठी } })) –

संबंधित मुद्दे