2011-10-03 17 views
5

से पढ़ने वाले तारों में विशिष्ट यूनिकोड वर्णों को प्रतिस्थापित करना मैं एक्सेल स्प्रेडशीट से पुनर्प्राप्त स्ट्रिंग में कुछ अवांछित वर्णों को प्रतिस्थापित करने का प्रयास कर रहा हूं। कारण यह है कि हमारा ओरेकल डेटाबेस WE8ISO8859P1 वर्ण सेट का उपयोग कर रहा है, जो कई वर्णों को परिभाषित नहीं करता है जो एक्सेल "मददगार" टेक्स्ट में आपके लिए सम्मिलित हैं (घुंघराले उद्धरण, एम और एन डैश इत्यादि) क्योंकि मेरे पास डेटाबेस पर कोई नियंत्रण नहीं है या एक्सेल स्प्रेडशीट कैसे बनाए जाते हैं मुझे पात्रों को किसी और चीज़ से बदलने की आवश्यकता है।एक्सेल

मैं एक स्ट्रिंग इस प्रकार में सेल सामग्री को पुनः प्राप्त:

string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim(); 

दृश्य स्टूडियो की पाठ Visualiser में स्ट्रिंग देखने पूर्ण और सही ढंग से लिया गया होना करने के लिए पाठ को दर्शाता है। अगला मैं कोशिश करते हैं और अवांछनीय वर्ण (इस मामले में दाएँ हाथ के घुंघराले उद्धरण चिह्न) में से एक की जगह:

s = Regex.Replace(s, "\u0094", "\u0022"); 

लेकिन यह (पाठ Visualiser यह अभी भी वहाँ हो को दर्शाता है) कुछ नहीं करता है। कोशिश करते हैं और सत्यापित करें कि चरित्र मैं बदलना चाहते हैं वहाँ में वास्तव में है के लिए, मैं करने की कोशिश की:

bool a = s.Contains("\u0094"); 

लेकिन यह गलत देता है। हालांकि:

bool b = s.Contains("”"); 

सत्य लौटाता है।

मेरी (कुछ हद तक कमी) .NET में स्ट्रिंग की समझ यह है कि वे यूटीएफ -16 में एन्कोड किए गए हैं, जबकि एक्सेल शायद एएनएसआई का उपयोग करेगा। तो क्या इसका मतलब है कि मुझे टेक्स्ट के एन्कोडिंग को बदलने की जरूरत है क्योंकि यह Excel से बाहर आता है? या मैं यहाँ कुछ और गलत कर रहा हूँ? किसी भी सलाह की काफी सराहना की जाएगी। मैंने यूनिकोड और एन्कोडिंग के बारे में सभी लेखों को पढ़ और पढ़ा है, लेकिन अभी भी कोई भी बुद्धिमान नहीं हूं।

उत्तर

4

नेट में हाँ तार UTF-16 हैं।

आप इसे सही कर रहे हैं; शायद आपका हेक्स-गणित गलत है। जिस चरित्र का आपने परीक्षण किया वह "\u0094" नहीं है (सुनिश्चित नहीं है कि आपका मतलब क्या है)। मेरे लिए काम किया है:

((int)"”"[0]).ToString("X") रिटर्न "201D"

"”" == "\u201D" रिटर्न true

"\u0094" == "" (दाहिने हाथ की ओर रिक्त स्ट्रिंग है) रिटर्न false

UTF-16 के पात्रों में से एक बहुत ही लगेगा टेक्स्ट विज़ुअलाइज़र द्वारा एक खाली स्ट्रिंग, लेकिन वे या तो एक अनजान चरित्र या सरोगेट का हिस्सा हो सकते हैं (यानी कुछ पात्रों को "\UXXXXXXXX" टाइप करने की आवश्यकता हो सकती है जबकि अन्य आप ca एन के साथ करें (चार अंक) "\uXXXX"।)। इस डोमेन का मेरा ज्ञान बहुत सीमित है।

संदर्भ - पर Jon Skeet के लेख:

+0

हां, आप बिल्कुल सही हैं, मेरे हेक्स मान बंद थे। बाहर निकलता है मैं यूटीएफ -16 के बजाय WIN1252 चरित्र सेट के लिए कोड पॉइंट का उपयोग कर रहा था। एक दिन मैं ये सब समझूंगा (जिस पर इसे कुछ समझ में नहीं आता है जो समझ में नहीं आता है)। जवाब के लिए धन्यवाद। –

2

आप स्तंभ उन अक्षरों को समायोजित करने के लिए जरूरत है कि के लिए NVARCHAR और ntext बजाय VARCHAR और पाठ का उपयोग कर सकते । इस तरह आपको पूरे डेटाबेस को परिवर्तित करने की ज़रूरत नहीं है, और आप भविष्य के सबूत हैं, क्योंकि कॉलम यूनिकोड होंगे।

+0

हां, यह आदर्श होगा, लेकिन दुख की बात है कि मेरे पास डेटाबेस पर कोई नियंत्रण नहीं है। –

+0

@ सिडहॉलैंड कृपया कोई मदद कृपया? :) http://stackoverflow.com/questions/36393449/special-characters-in-oracle-nclob –