如果我有一串UTF-8字符并且需要以UTF-7的形式输出到较旧的系统,我有两个与此有关的问题。
如何将具有UTF-8字符的字符串s转换为没有这些字符的相同字符串?
是否有将“Ō”等扩展字符转换为最接近的非扩展等效“O”的简单方法?
答案 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);