2009-07-30 46 views
3

如果我有一串UTF-8字符,並且它們需要以UTF-7的形式輸出到舊系統,我有兩個問題與此有關。.NET中的智能UTF-8到UTF-7

  1. 如何將具有UTF-8字符的字符串s轉換爲沒有這些字符的相同字符串?

  2. 是否有任何簡單的將擴展字符(如'Ō')轉換爲最接近的非擴展等效'O'?

+4

.NET字符串是UTF-16。總是。 – Joey 2009-07-30 20:53:52

回答

5

如果舊系統能夠正確處理UTF-7,爲什麼要刪除任何東西?只需將字符串編碼爲UTF-7:

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

然後將UTF-7編碼文本發送到舊系統。

如果你有原來的UTF-8編碼的字節,可以在一個步驟做到這一點:

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

如果實際上需要轉換爲ASCII碼,你可以做這很容易。

爲了除去非ASCII字符:

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

爲了非ASCII轉換爲最接近的等同物:

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