2015-12-19 14 views
5

मैं एक HTML पृष्ठ से सभी छवियों को हटाने के लिए Jsoup का उपयोग कर रहा हूं। मुझे एक HTTP प्रतिक्रिया के माध्यम से पृष्ठ प्राप्त हो रहा है - जिसमें सामग्री वर्णमाला भी शामिल है।Jsoup विशेष वर्णों को अनदेखा करता है

समस्या यह है कि Jsoup कुछ विशेष पात्रों से निकलता है।

उदाहरण के लिए, निवेश के लिए:

<html><head></head><body><p>isn&rsquo;t</p></body></html> 

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>"; 
Document doc = Jsoup.parse(check); 
System.out.println(doc.outerHtml()); 

चलाने के बाद मैं:

<html><head></head><body><p>isn’t</p></body></html><p></p> 

मैं छोड़कर किसी अन्य तरीके से एचटीएमएल बदल रहा से बचना चाहते हैं छवियों को हटाने के लिए।

आदेश का उपयोग द्वारा:

doc.outputSettings().prettyPrint(false).charset("ASCII").escapeMode(EscapeMode.extended); 

मैं सही उत्पादन मिलता है लेकिन मुझे यकीन है कि वहाँ मामलों में जहां कि चारसेट अच्छा नहीं होगा हूँ। मैं सिर्फ HTTP शीर्षलेख में वर्णित वर्णसेट का उपयोग करना चाहता हूं और मुझे डर है कि यह मेरे दस्तावेज़ को उन तरीकों से बदल देगा जिनकी मैं भविष्यवाणी नहीं कर सकता। क्या अनजाने में कुछ और बदले बिना छवियों को हटाने के लिए कोई अन्य क्लीनर विधि है?

धन्यवाद!

उत्तर

3

यहां एक वर्कअराउंड है जो HTTP शीर्षलेख में निर्दिष्ट किसी को छोड़कर किसी भी वर्णमाला को शामिल नहीं करता है।

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>".replaceAll("&([^;]+?);", "**$1;"); 

Document doc = Jsoup.parse(check); 

doc.outputSettings().prettyPrint(false).escapeMode(EscapeMode.extended); 

System.out.println(doc.outerHtml().replaceAll("\\*\\*([^;]+?);", "&$1;")); 

आउटपुट

<html><head></head><body><p>isn&rsquo;t</p></body></html> 

चर्चा

काश वहाँ Jsoup के एपीआई में एक समाधान था - @dlv

Jsoup'API का उपयोग करने के लिए आपको एक कस्टम नोडविजिटर लिखने की आवश्यकता होगी। यह Jsoup के अंदर कुछ मौजूदा कोड का आविष्कार (पुन) होगा। कस्टम Nodevisitor एक यूनिकोड चरित्र के बजाय एक HTML एस्केप कोड वापस उत्पन्न करेगा।

एक और विकल्प में कस्टम वर्ण एन्कोडर लिखना शामिल होगा। डिफ़ॉल्ट यूटीएफ -8 वर्ण एन्कोडर &rsquo; एन्कोड कर सकता है। यही कारण है कि Jsoup अंतिम HTML कोड में मूल भागने अनुक्रम को संरक्षित नहीं करता है।

उपर्युक्त दो विकल्पों में से कोई भी एक बड़ा कोडिंग प्रयास का प्रतिनिधित्व करता है। आखिरकार, अंतिम एचटीएमएल कोड में अक्षरों को उत्पन्न करने का तरीका चुनने के लिए जेएसओप में एक वृद्धि को जोड़ा जा सकता है: हेक्साडेसिमल एस्केप (&#AB;), दशमलव भागने (&#151;), मूल भागने अनुक्रम (&rsquo;) या एन्कोडेड वर्ण लिखें (जो आपकी पोस्ट में मामला है)।

+0

धन्यवाद, मैं अब इसका उपयोग करूंगा हालांकि मेरी इच्छा है कि जेएसओपी के एपीआई में कोई समाधान हो। – dlv

+0

@dlv कृपया मेरा अपडेट देखें। – Stephan

+0

धन्यवाद! यह वास्तव में जानकारीपूर्ण है। – dlv

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