2012-06-05 11 views
5

मुझे हमारे अंक ट्रैकर में टिकट मिला कि ग्राहकों में से एक बग की रिपोर्ट करता है कि एक ग्रंथ अधूरा है! हमारे पास एक विरासत प्रणाली (आईबीएम एएस 400) से एक आधुनिक रूपांतरण के लिए एक टेक्स्ट रूपांतरण कार्यक्रम है। मैंने इसे ट्रैक किया और मेरे कोड पर एक अज्ञात व्यवहार पाया !!स्ट्रिंग.Trim() आवश्यकता से अधिक हटा देता है?

सबसे पहले यह देखें: bug-full state

जैसा कि आप देख, वहाँ दो चार है से पहले पहला अंतरिक्ष (char32), लेकिन जब मैं Trim() निकालने के लिए, परिणाम है के रूप में:

bug-free state

हाँ, Trim() शुरुआत से char160 हटा देता है! क्या हुआ कि Trim() आवश्यकता से अधिक काम करता है? नोट: दोनों चित्र एक ही परीक्षण स्थिति में कब्जा कर लिया जाता है।

+0

160 char नहीं है अपने एन्कोडिंग में एक अंतरिक्ष? या शायद आप गलत कोड पेज का उपयोग कर रहे हैं? – Vlad

+0

यह एक सही चरित्र है जिसे मैं जानता हूं। –

+0

इसका मतलब है कि आपका कोडपृष्ठ गलत है, क्योंकि cp1256 में यह वर्ण _is_ एक सफेद जगह है। – Vlad

उत्तर

15

160 एक एनबीएसपी (गैर-ब्रेकिंग स्पेस) है और दस्तावेज के अनुसार, Trim सभी व्हाइटस्पेस को हटा देगा। 160 को यूनिकोड में व्हाइटस्पेस के रूप में वर्गीकृत किया गया है।

आप इसके बजाय Trim(' ') पर कॉल करना चाहेंगे।

4

Trim() सफेद और अंतरिक्ष वाले सफेद अंतरिक्ष पात्रों को हटा देता है, और यह what it is supposed to do है।

चार 160 एक गैर ब्रेकिंग स्पेस है, जो इसे हटाए जाने वाले सफेद अंतरिक्ष पात्रों में से एक है।

2

ट्रिम सभी जगहों को हटा देता है, केवल रिक्त स्थान नहीं। यदि चार पृष्ठ कोड पृष्ठ 1256 में एक व्हाइटस्पेस है, तो ट्रिम इसे हटा देगा।

निम्न कोड से पता चलता है कि 32 और 160 कोड पृष्ठ पर 1256 में खाली स्थान के हैं:

 var chars = new byte[] {32,160,164 }; 
     var enc=Encoding.GetEncoding(1256); 
     var str=enc.GetString(chars); 
     foreach (var character in str) 
     { 
      Console.WriteLine("{0}:{1}", character, Char.IsWhiteSpace(character)); 
     } 
     Console.ReadKey(); 

रिटर्न:

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