.NET中的UTF-8智能UTF-7

时间:2009-07-30 20:52:02

标签: .net utf-8 utf-7

如果我有一串UTF-8字符并且需要以UTF-7的形式输出到较旧的系统,我有两个与此有关的问题。

  1. 如何将具有UTF-8字符的字符串s转换为没有这些字符的相同字符串?

  2. 是否有将“Ō”等扩展字符转换为最接近的非扩展等效“O”的简单方法?

1 个答案:

答案 0 :(得分: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);