WideCharToMultiByte कि अलग करना विशेषक सहित निर्दिष्ट वर्ण सेट, द्वारा समर्थित नहीं हैं कोई भी वर्ण के लिए सबसे फिट मानचित्रण करता है। आप इसे ठीक से कर सकते हैं और 20127 (यूएस-एएससीआईआई) को कोडपेज के रूप में पास कर सकते हैं।
function BestFit(const AInput: AnsiString): AnsiString;
const
CodePage = 20127; //20127 = us-ascii
var
WS: WideString;
begin
WS := WideString(AInput);
SetLength(Result, WideCharToMultiByte(CodePage, 0, PWideChar(WS),
Length(WS), nil, 0, nil, nil));
WideCharToMultiByte(CodePage, 0, PWideChar(WS), Length(WS),
PAnsiChar(Result), Length(Result), nil, nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(BestFit('aÀàËëÇç–—€¢Š'));
end;
कॉलिंग कि आपके उदाहरणों के साथ पैदा करता है परिणाम आप देख रहे हैं, emdash-टू-शून्य से मामला है, जो मुझे नहीं लगता कि जेरोन के सुझाव द्वारा नियंत्रित किया जाता डी प्रपत्र सामान्यीकरण में बदलने के लिए यदि आपने ऐसा किया है सहित उस दृष्टिकोण को लेना चाहते हैं, माइकल कपलन के पास blog post स्पष्ट रूप से डायक्रिटिक्स (सामान्य रूप से सामान्यीकरण के बजाए) को स्पष्ट रूप से चर्चा करता है, लेकिन यह सी # और एक एपीआई का उपयोग करता है जो Vista में पेश किया गया था। आप FoldString एपीआई (किसी भी WinNT रिलीज) का उपयोग कर कुछ मिल सकते हैं।
बेशक यदि आप केवल एक चरित्र सेट के लिए ऐसा कर रहे हैं, और आप ओवरहेड से वाइडस्ट्रिंग में और से कनवर्ट करने से बचना चाहते हैं, तो पडू सही है कि लूप और लुकअप टेबल के लिए एक सरल ।
स्रोत
2009-12-12 05:33:34
धन्यवाद क्रेग। यह लुकअप से अधिक सामान्य समाधान है। इसमें जादू संख्या में एक टाइपो था, इसलिए मैंने इसे सही किया और इसके बजाय स्थिर का उपयोग किया। लेकिन वैसे भी, यह डी 2007 के साथ-साथ डी 200 9 पर भी काम करता है। –
एक बात हमने इसके साथ देखी, यह है कि 'β' (यूनिकोड 1E9E लैटिन कैपिटल अक्षर तेज एस) परिवर्तित नहीं होता है, इसलिए हम इसे पहले से करते हैं: स्ट्रिंगरप्लेस (एएसआरटी, 'β', 'एसएस', [आरएफआरईप्लेसएएल]) – PatrickvL