क्या यह कोड क्लीनर/तेज़ रूप में सरल बनाना संभव है?क्या हम इस स्ट्रिंग एन्कोडिंग कोड को सरल बना सकते हैं
StringBuilder builder = new StringBuilder();
var encoding = Encoding.GetEncoding(936);
// convert the text into a byte array
byte[] source = Encoding.Unicode.GetBytes(text);
// convert that byte array to the new codepage.
byte[] converted = Encoding.Convert(Encoding.Unicode, encoding, source);
// take multi-byte characters and encode them as separate ascii characters
foreach (byte b in converted)
builder.Append((char)b);
// return the result
string result = builder.ToString();
बस शब्दों में कहें, यह चीनी अक्षरों जैसे 鄆 के साथ एक स्ट्रिंग लेता है और उन्हें एई में परिवर्तित करता है।
उदाहरण के लिए, दशमलव में चीनी वर्ण हेक्स में 37126 या 0x9106 है।
देखें http://unicodelookup.com/#0x9106/1
एक बाइट सरणी में परिवर्तित, हम मिल [145, 6] (145 * 256 + 6 = 37126)। कोडपेज 936 (सरलीकृत चीनी) में एन्कोड किए जाने पर, हमें [224, 105] मिलता है। यदि हम इस बाइट सरणी को अलग-अलग वर्णों में विभाजित करते हैं, तो हम 224 = e0 = à और 105 = 69 = i यूनिकोड में।
इस प्रकार http://unicodelookup.com/#0x00e0/1 और http://unicodelookup.com/#0x0069/1
देखें, हम एक एन्कोडिंग रूपांतरण कर रहे हैं और यह सुनिश्चित करना है कि हमारे उत्पादन यूनिकोड स्ट्रिंग के सभी पात्रों पर सबसे दो बाइट्स में उपयोग करते हुए दर्शाया जा सकता है।
अपडेट: मुझे इस अंतिम प्रतिनिधित्व की आवश्यकता है क्योंकि यह मेरा रसीद प्रिंटर स्वीकार कर रहा है। इसे हमेशा समझने के लिए मुझे ले लिया! :) चूंकि मैं एन्कोडिंग विशेषज्ञ नहीं हूं, इसलिए मैं सरल या तेज़ कोड ढूंढ रहा हूं, लेकिन आउटपुट एक ही रहना चाहिए।
अद्यतन (क्लीनर संस्करण):
return Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.GetEncoding(936).GetBytes(text));
मुझे लगता है कि आपका रसीद प्रिंटर .NET तारों को स्वीकार नहीं करता है, तो आप रसीद प्रिंटर को वास्तव में क्या भेज रहे हैं? पाठ blobs? यदि ऐसा है, तो सभी पाठ तार पर एन्कोड किए गए हैं, इसलिए प्रक्रिया में बाद में कुछ छुपे हुए एन्कोडिंग चलने का एक अच्छा मौका है; "सर्वोत्तम" समाधान को समझना आसान हो सकता है यदि यह स्पष्ट था * कैसे * आप प्रिंटर के साथ संवाद कर रहे हैं। –
मैं .NET के लिए पीओएस का उपयोग कर रहा हूं ... यह स्ट्रिंग स्वीकार करता है और जब तक मैं कोडपेज 1252 में रहता था तब तक यह ठीक काम करता था ... लेकिन 936 के कारण मुद्दों पर पहुंचा, जो इस विशिष्ट प्रिंटर को इन पात्रों को पहचानने के तरीके के कारण है। –
वर्णों की एक सरणी आवंटित करने के लिए अक्सर तेज़ होता है, इसे आवंटित करने के लिए लूप के लिए उपयोग करें, और उसके बाद स्ट्रिंग के कन्स्ट्रक्टर का उपयोग स्ट्रिंग में स्ट्रिंग कैरेक्टर में जोड़ने के बजाय स्ट्रिंग में करने के लिए करें। – Brian