2012-12-21 40 views
10

मेरे सी # कोड में, मैं एक पीडीएफ दस्तावेज़ से पाठ निकालने जा रहा हूं। जब मैं ऐसा करता हूं, तो मुझे एक स्ट्रिंग मिलती है जो यूटीएफ -8 या यूनिकोड एन्कोडिंग में है (मुझे यकीन नहीं है)। जब मैं Encoding.UTF8.GetBytes(src); का उपयोग यह एक बाइट सरणी में परिवर्तित करने के लिए, मैं नोटिस कि खाली स्थान के वास्तव में और 160व्हाइटस्पेस के लिए यूटीएफ एन्कोडिंग को कैसे ठीक किया जाए?

उदाहरण के लिए 194 की बाइट मूल्यों के साथ दो वर्ण है स्ट्रिंग "CLE कार्रवाई" लग रहा है

तरह
[67, 76, 69, 194 ,160, 65 ,99, 116, 105, 111, 110] 

एक बाइट सरणी में, जहां व्हाइटस्पेस 1 9 4 और 160 है ... और इस वजह से src.IndexOf("CLE action"); वापस लौटा रहा है -1 जब मुझे इसे वापस करने की आवश्यकता है 1.

मैं स्ट्रिंग के एन्कोडिंग को कैसे ठीक कर सकता हूं?

उत्तर

17

194 160NO-BREAK SPACE कोडपॉइंट का यूटीएफ -8 एन्कोडिंग (उसी कोडपॉइंट जो एचटीएमएल   पर कॉल करता है)।

तो यह वास्तव में एक जगह नहीं है, भले ही यह एक जैसा दिखता हो। (उदाहरण के लिए, आप इसे शब्द-लपेट नहीं पाएंगे।) \s के लिए एक नियमित अभिव्यक्ति मिलान इससे मेल खाता है, लेकिन एक स्थान के साथ एक सादा तुलना नहीं होगी।

src = src.Replace('\u00A0', ' '); 
+0

मैं एक सामान्य स्थान के साथ एक गैर-ब्रेकिंग स्पेस को कैसे बदल सकता हूं? – omega

+4

@omega: src = src.Replace ('\ u00A0', ''); – RichieHindle

1

की व्याख्या करना \xC2\xA0 (= 194, 160) के रूप में UTF8 वास्तव में \xA0 जो यूनिकोड नॉन-ब्रेकिंग स्पेस है अर्जित करता है। यह सामान्य स्थान की तुलना में एक अलग चरित्र है और इस प्रकार, सामान्य रिक्त स्थान से मेल नहीं खाता है। आपको गैर-ब्रेकिंग स्पेस के खिलाफ मिलान करना होगा या किसी भी व्हाइटस्पेस के खिलाफ फ़ज़ी-मेलिंग का उपयोग करना होगा।

1

UTF8 में चरित्र मूल्य c2 a0 (194 160) विराम रहित स्पेस के रूप में परिभाषित किया गया है:

बस विराम रिक्त स्थान आप निम्न कर सकते बदलने के लिए। आईएसओ/आईईसी 885 9 के अनुसार यह एक ऐसी जगह है जो लाइन ब्रेक डालने की अनुमति नहीं देती है। आम तौर पर पाठ प्रसंस्करण सॉफ्टवेयर मानता है कि किसी भी सफेद अंतरिक्ष चरित्र पर एक लाइन ब्रेक डाला जा सकता है (इस प्रकार शब्द रैप को सामान्य रूप से लागू किया जाता है)। आपको समस्या को ठीक करने के लिए सामान्य स्थान वाले वर्णों की अपनी स्ट्रिंग में बस प्रतिस्थापन करने में सक्षम होना चाहिए।

+0

मैं स्ट्रिंग प्रतिस्थापन फ़ंक्शन कैसे लिख सकता हूं? – omega

+1

@omega: src = src.Replace ('\ u00A0', ''); – RichieHindle