2009-07-30 3 views
3

文字列がUTF-8文字で、UTF-7として古いシステムに出力する必要がある場合は、これに関する2つの質問があります。インテリジェントなUTF-8から.NETのUTF-7

  1. UTF-8文字を含む文字列sを、それらの文字を含まない同じ文字列に効率的に変換するにはどうすればよいですか?

  2. 'Ō'などの拡張文字を最も近い非拡張の 'O'に変換することは簡単ですか?

+4

.NET文字列はUTF-16です。常に。 – Joey

答えて

5

古いシステムで実際にUTF-7を正しく処理できる場合は、どうして何かを削除したいのですか?文字列をUTF-7としてエンコードするだけです。

string text = LoadFromWherever(Encoding.UTF8); 
byte[] utf7 = Encoding.UTF7.GetBytes(text); 

次に、UTF-7でエンコードされたテキストを古いシステムに送ります。あなたは、元のUTF-8でエンコードされたバイトを持っていれば

、あなたはワンステップでこれを行うことができます:あなたは実際がASCIIに変換する必要がある場合

byte[] utf7 = Encoding.Convert(Encoding.UTF8, Encoding.UTF7, utf8); 

は、あなたが行うことができますこれは合理的に簡単です。

var encoding = Encoding.GetEncoding 
    ("us-ascii", new EncoderReplacementFallback(""), 
    new DecoderReplacementFallback("")); 
byte[] ascii = encoding.GetBytes(text); 

最寄り同等に非ASCIIを変換するには::非ASCII文字を削除するには

string normalized = text.Normalize(NormalizationForm.FormKD); 
var encoding = Encoding.GetEncoding 
    ("us-ascii", new EncoderReplacementFallback(""), 
    new DecoderReplacementFallback("")); 
byte[] ascii = encoding.GetBytes(normalized); 
関連する問題