2015-07-22 18 views
6

kırar:node.js Cheerio ayrıştırıcı böyle Cheerio ile benim isteği ayrıştırmak UTF-8 kodlamasını

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()); 
}); 

Ve içeriği ancak okunamaz garip kodlama gördüğünüz çıktı olarak:

//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 

Hedef url bağlantı kodlaması UTF-8 formatındadır. Peki Cheerio neden kodlarımı kırıyor?

bedenim yanıtının kodlamak için iconv kullanmaya çalışıyorum:

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

ama console.log($(".description").html()); hala garip metni döndürür.

+0

, kontrol edildiğinde açısından bu yanıtı: Eğer kodlanmamış metni almak istiyorsanız

Ancak, decodeEntities seçenek false ayarlayabilirsiniz /stackoverflow.com/questions/23805566/weird-characters-when-using-console-print-cheerio-nodejs – snozza

+0

nope, hala aynı sonuç :( – MeetJoeBlack

cevap

17

Cheerio hiçbir şey yapmadı. Çıktıları HTML, HTML girişi ile tam olarak aynı tarayıcı tarafından oluşturulacak. Bu pasajı bir göz atın:

<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>

O &#x423; UTF-8 karakteri У için HTML "varlık" varlık &gt;> yansıtması gibi olduğunu sadece dava. /: http kodlaması ile uğraşmaya

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} iyi çalışıyor! – MeetJoeBlack

+0

ayrıca firt & # xFEFF; char Cheerio çıktısında eklendi, thx. –

+0

Teşekkür ederiz! Çözümünüz de gulp-cheerio için çalışıyor. Ben sadece bu seçeneği kullandım: gulp.src ("./ mysrc") .pipe ({ Çalıştır: işlev ($, dosya) { // burada bir şey yap ... }, parserOptions: { xmlMode: true, decodeEntities: false } })) –