2011-09-06 14 views
10

में एन्कोडिंग सूची प्राप्त करें मैं समर्थित एनकोडिंग की सूची प्राप्त करने की जरूरत है, लेकिन मैं .NET 1.1 उपयोग कर रहा हूँ, तो निम्न कॉल उपलब्ध नहीं है:.NET 1.1

using System; 
using System.Text; 

public class SamplesEncoding 
{ 
    public static void Main() 
    { 
     // For every encoding, get the property values. 
     foreach(EncodingInfo ei in Encoding.GetEncodings()) 
     { 
     Encoding e = ei.GetEncoding(); 

     Console.Write("{0,-6} {1,-25} ", ei.CodePage, ei.Name); 
     Console.Write("{0,-8} {1,-8} ", e.IsBrowserDisplay, e.IsBrowserSave); 
     Console.Write("{0,-8} {1,-8} ", e.IsMailNewsDisplay, e.IsMailNewsSave); 
     Console.WriteLine("{0,-8} {1,-8} ", e.IsSingleByte, e.IsReadOnly); 
     } 
    } 
} 

कॉल Encoding.GetEncodings() है .NET 1.1 के लिए उपलब्ध नहीं है। क्या आप उस सूची को पाने के लिए कोई वैकल्पिक तरीका जानते हैं?

+4

.NET 2.0 में अपग्रेड करें? – dtb

+2

@dtb क्या आप उन लोगों में से एक हैं जो "जावा का उपयोग करें" पोस्ट करते हैं जब कोई .NET प्रश्न पोस्ट करता है? ;-) – Justin

+0

@ डीटीबी: मेरा जीवन बहुत खुश होगा, लेकिन मैं –

उत्तर

4

काफी सरल: .NET 1.1 है " तय ": यह नहीं बदलेगा। आप 2.0 की एन्कोडिंग लेते हैं और परीक्षण करते हैं कि वे 1.1 में पहले से मौजूद हैं या नहीं। उदाहरण के लिए:

string[] encs = new string[] { 
    "IBM037", "IBM437", "IBM500", "ASMO-708", "DOS-720", "ibm737", 
    "ibm775", "ibm850", "ibm852", "IBM855", "ibm857", "IBM00858", 
    "IBM860", "ibm861", "DOS-862", "IBM863", "IBM864", "IBM865", 
    "cp866", "ibm869", "IBM870", "windows-874", "cp875", 
    "shift_jis", "gb2312", "ks_c_5601-1987", "big5", "IBM1026", 
    "IBM01047", "IBM01140", "IBM01141", "IBM01142", "IBM01143", 
    "IBM01144", "IBM01145", "IBM01146", "IBM01147", "IBM01148", 
    "IBM01149", "utf-16", "utf-16BE", "windows-1250", 
    "windows-1251", "Windows-1252", "windows-1253", "windows-1254", 
    "windows-1255", "windows-1256", "windows-1257", "windows-1258", 
    "Johab", "macintosh", "x-mac-japanese", "x-mac-chinesetrad", 
    "x-mac-korean", "x-mac-arabic", "x-mac-hebrew", "x-mac-greek", 
    "x-mac-cyrillic", "x-mac-chinesesimp", "x-mac-romanian", 
    "x-mac-ukrainian", "x-mac-thai", "x-mac-ce", "x-mac-icelandic", 
    "x-mac-turkish", "x-mac-croatian", "utf-32", "utf-32BE", 
    "x-Chinese-CNS", "x-cp20001", "x-Chinese-Eten", "x-cp20003", 
    "x-cp20004", "x-cp20005", "x-IA5", "x-IA5-German", 
    "x-IA5-Swedish", "x-IA5-Norwegian", "us-ascii", "x-cp20261", 
    "x-cp20269", "IBM273", "IBM277", "IBM278", "IBM280", "IBM284", 
    "IBM285", "IBM290", "IBM297", "IBM420", "IBM423", "IBM424", 
    "x-EBCDIC-KoreanExtended", "IBM-Thai", "koi8-r", "IBM871", 
    "IBM880", "IBM905", "IBM00924", "EUC-JP", "x-cp20936", 
    "x-cp20949", "cp1025", "koi8-u", "iso-8859-1", "iso-8859-2", 
    "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", 
    "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-13", 
    "iso-8859-15", "x-Europa", "iso-8859-8-i", "iso-2022-jp", 
    "csISO2022JP", "iso-2022-jp", "iso-2022-kr", "x-cp50227", 
    "euc-jp", "EUC-CN", "euc-kr", "hz-gb-2312", "GB18030", 
    "x-iscii-de", "x-iscii-be", "x-iscii-ta", "x-iscii-te", 
    "x-iscii-as", "x-iscii-or", "x-iscii-ka", "x-iscii-ma", 
    "x-iscii-gu", "x-iscii-pa", "utf-7", "utf-8" 
}; 

और

foreach (string enc in encs) 
{ 
    try { 
     Encoding.GetEncoding(enc); 
    } catch { 
     Console.WriteLine("Missing {0}", enc); 
    } 
} 

(हाँ, कि एन्कोडिंग की पूरी सूची है .NET 4.0 में पेश ... आप उन्हें "सांख्यिक" मूल्य में की जरूरत है, यह होगा काफी इसे करने में आसान)। फिर आप उन लोगों को लेते हैं जो काम नहीं करते हैं और उन्हें उस सूची से दूर ले जाते हैं।

उन्हें उत्पन्न करने के लिए (कम से कम .NET 2.0 और सी # 3.0):

var encs = Encoding.GetEncodings().Select(p => p.Name); 
//var encs = Encoding.GetEncodings().Select(p => p.CodePage); 

var sb = new StringBuilder("var encs = new[] {"); 

foreach (var enc in encs) { 
    sb.Append(" \"" + enc + "\","); 
    //sb.Append(" " + enc + ","); 
} 

sb.Length--; 

sb.Append(" };"); 

var str = sb.ToString(); 

Console.WriteLine(str); 
+0

' foreach में var' हिस्सा .NET 1.1 के लिए मान्य नहीं है। आपकी सहायताके लिए धन्यवाद! –

+0

@ डैनियल वूप्स। सही किया। – xanatos

1

प्रलेखन का कहना है कि आप Encoding.GetEnconding(int CodePage) का उपयोग करना चाहिए जहां CodePage से एक होना चाहिए:

निम्नलिखित विंडोज कोड पृष्ठों मौजूद हैं:

874 — Thai 
932 — Japanese 
936 — Chinese (simplified) (PRC, Singapore) 
949 — Korean 
950 — Chinese (traditional) (Taiwan, Hong Kong) 
1200 — Unicode (BMP of ISO 10646, UTF-16LE) 
1201 — Unicode (BMP of ISO 10646, UTF-16BE) 
1250 — Latin (Central European languages) 
1251 — Cyrillic 
1252 — Latin (Western European languages) 
1253 — Greek 
1254 — Turkish 
1255 — Hebrew 
1256 — Arabic 
1257 — Latin (Baltic languages) 
1258 — Vietnamese 
65000 — Unicode (BMP of ISO 10646, UTF-7) 
65001 — Unicode (BMP of ISO 10646, UTF-8) 

Taken from Wikipedia

2

मान लिया जाये कि मैं पूरी तरह से स्थिति (बहुत संभव) गलत समझा नहीं किया है, निम्नलिखित यदि आप एक या दो मिनट के बारे में है काम करना चाहिए इसके लिए इंतजार करना यह वास्तव में धीमा है, थोड़ा बदसूरत का जिक्र नहीं है।

public static Encoding[] GetList() 
{ 
    ArrayList arrayList; 
    arrayList = new ArrayList(); 
    for (int i = 0; i < 65535; i++) 
    { 
     try 
     { 
      arrayList.Add(Encoding.GetEncoding(i)); 
     } 
     catch(Exception ex) 
     { 
     } 
    } 
    return (Encoding[])arrayList.ToArray(typeof(Encoding)); 
} 
संबंधित मुद्दे