2011-11-30 6 views
13

मैं उपयोग कर रहा हूँ: Module: Request -- Simplified HTTP request method उच्चारण चिह्न वर्ण á é ó ú ê ã के साथ एक वेबपृष्ठ स्क्रैप करने का आदिमॉड्यूल अनुरोध कैसे उच्चारण अक्षरों को ठीक से पुनर्प्राप्त करने के लिए?

मैं पहले से ही encoding: utf-8 कोई सफलता के साथ की कोशिश की है। मुझे अभी भी परिणाम में यह अक्षर मिल रहा है।

request.get({ 
    uri: url, 
    encoding: 'utf-8' 
    // ... 

क्या इसे ठीक करने के लिए कोई विन्यास है?

अगर यह एक मुद्दा है मैं नहीं जानता, लेकिन मैं filled one for this module। अभी तक कोई जवाब नहीं है। :/

+0

ठीक है, क्या एन्कोडिंग वेब पेज में लिखा है? UTF8? आईएसओ कुछ? – thejh

+4

मैंने इस मुद्दे में आपको उत्तर दिया (https://github.com/mikeal/request/issues/118#issuecomment-2965894)। मुझे नहीं पता क्यों, लेकिन मैंने एन्कोडिंग के लिए 'बाइनरी' का इस्तेमाल किया और यह काम किया। –

+3

मेरे लिए भी, केवल 'एन्कोडिंग' जोड़ना: बाइनरी ने – renatoargh

उत्तर

18

के बाद से बाइनरी हटा दिया गया है ऐसा लगता है एक बेहतर विचार की तरह iconv उपयोग करने के लिए और सही ढंग से डिकोडिंग संभाल:

var request = require("request"), iconv = require('iconv-lite'); 
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"}; 

request(requestOptions, function(error, response, body) { 
    var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1"); 
    console.log(utf8String); 
}); 

महत्वपूर्ण हिस्सा अशक्त encoding: null होने के लिए HTTP अनुरोध पर एन्कोडिंग सेट करने के लिए है।

+0

यह बहुत अच्छा काम करता है, लेकिन मेरे पास दो प्रश्न हैं। 1. आपको शरीर के लिए नया बफर बनाने की आवश्यकता क्यों है? मैंने सीधे शरीर का उपयोग करने की कोशिश की और कोई फर्क नहीं देखा। मुझे क्या याद आती है? 2. यदि वेब पेज charset = utf-8 कहता है, तो मुझे इसे आईएसओ -885 9 -1 में बदलने के लिए आइकनव-लाइट का उपयोग क्यों करना है? – newman

2

utf8 नहीं utf-8 के रूप में एन्कोडिंग को निर्दिष्ट करें। the Node.js documentation से बफर के लिए संभावित एन्कोडिंग की एक सूची यहां दी गई है।

  • ascii - केवल 7 बिट ASCII डेटा के लिए। यह एन्कोडिंग विधि बहुत तेज़ है, और सेट होने पर उच्च बिट पट्टी कर देगी।
  • utf8 - यूनिकोड वर्ण। कई वेब पेज और अन्य दस्तावेज़ प्रारूप यूटीएफ -8 का उपयोग करते हैं।
  • base64 - Base64 स्ट्रिंग एन्कोडिंग।
  • 'binary - केवल प्रत्येक चरित्र के पहले 8 बिट का उपयोग करके तार में कच्चे बाइनरी डेटा एन्कोडिंग का एक तरीका है। इस एन्कोडिंग विधि को कम किया जाता है और जहां संभव हो वहां बफर ऑब्जेक्ट्स के पक्ष में टालना चाहिए। यह एन्कोडिंग नोड के भविष्य के संस्करणों में हटा दी जाएगी।
+2

utf-8 utf8 के रूप में काम करता है। जिस पृष्ठ को मैं स्क्रैप कर रहा हूं वह आईएसओ -885 9 -1 है। मेरे लिए काम करने वाला एकमात्र एन्कोडिंग "बाइनरी" था ... बहुत अजीब ... हमने इसके बारे में चर्चा की है https://github.com/mikeal/request/issues/118 –

+2

बाइनरी काम करता है। टिप्पणी के लिए धन्यवाद। :) –

+0

मेरे लिए बाइनरी काम करता है। मैं अनुरोध मॉड्यूल का उपयोग कर रहा हूं, मैंने एन्कोडिंग पास की: विकल्प में 'बाइनरी'। धन्यवाद –

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