2010-04-20 19 views
6

में सुपर-या सबस्क्रिप्ट को सामान्य टेक्स्ट में कैसे परिवर्तित करें मैं अच्छे यूआरएल बनाने के लिए एक स्लग जेनरेटर लिख रहा हूं। मैं m² से m2 में कनवर्ट करना चाहता हूं, लेकिन एक सामान्य तरीके से यह सभी सुपरस्क्रिप्ट (या सबस्क्रिप्ट) के लिए करता है, न केवल एक साधारण प्रतिस्थापन कथन।सी #

कोई विचार?

उत्तर

1

यदि आपकी स्ट्रिंग यूआरएल में जा रही है, तो मुझे लगता है कि यह यूनिकोड वर्णों के रूप में कुछ प्रकार का नियमित गैर-स्वरूपित पाठ है (उदाहरण के लिए एमएस वर्ड डॉक के विपरीत)। यूनिकोड में, you can only have certain characters as superscript or subscript। वे नहीं हैं कि कई और एक साधारण स्विच स्टेटमेंट नौकरी करेगा।

यदि आप स्वरूपित पाठ को परिवर्तित करने की कोशिश कर रहे हैं जिसमें सुपरस्क्रिप्ट या सबस्क्रिप्ट के रूप में सभी प्रकार के वर्ण शामिल हो सकते हैं, तो इसका मतलब है कि उन्हें सीधे यूनिकोड के रूप में प्रतिनिधित्व नहीं किया जाता है, और यह टेक्स्ट के प्रारूप पर बहुत निर्भर करेगा। यदि ऐसा है, तो कृपया प्रश्न में अधिक जानकारी दें।

+1

ध्यान दें कि यूनिकोड में सभी सुपर-और स्क्रिप्ट्स में उनके सामान्य चरित्र समकक्षों में अपघटन होता है। इसलिए, वास्तव में वर्णों के मनमाना चयन के हार्डकोड किए गए 'स्विच' कथन के बिना काम करना चाहिए। – Joey

4

धन्यवाद जोहान्स, आपने मुझे सही रास्ते पर सेट किया है। कोड जिसके साथ मैं यह काम करने के लिए मिल गया है इस प्रकार है:

public string ConvertSuperscript(string value) 
{ 
    string stringFormKd = value.Normalize(NormalizationForm.FormKD); 
    StringBuilder stringBuilder = new StringBuilder(); 

    foreach (char character in stringFormKd) 
    { 
     UnicodeCategory unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(character); 
     if (unicodeCategory != UnicodeCategory.NonSpacingMark) 
     { 
      stringBuilder.Append(character); 
     } 
    } 

    return stringBuilder.ToString().Normalize(NormalizationForm.FormKC); 
} 

मैंने पहले विहित अपघटन करने की कोशिश की है, लेकिन यह ठीक से काम करने अनुकूलता अपघटन की जरूरत है।