如果我有一串UTF-8字符,并且需要以UTF-7的形式输出到旧系统,我有两个与此有关的问题.
如何将具有UTF-8字符的字符串s转换为没有这些字符的相同字符串?
是否有任何简单的转换扩展字符,如'?' 他们最接近的非延伸等价'O'?
如果旧系统可以正确处理UTF-7,为什么要删除任何东西呢?只需将字符串编码为UTF-7:
string text = LoadFromWherever(Encoding.UTF8);
byte[] utf7 = Encoding.UTF7.GetBytes(text);
Run Code Online (Sandbox Code Playgroud)
然后将UTF-7编码的文本发送到旧系统.
如果你有原始的UTF-8编码字节,你可以一步完成:
byte[] utf7 = Encoding.Convert(Encoding.UTF8, Encoding.UTF7, utf8);
Run Code Online (Sandbox Code Playgroud)
如果您确实需要转换为ASCII,则可以合理地轻松完成.
要删除非ASCII字符:
var encoding = Encoding.GetEncoding
("us-ascii", new EncoderReplacementFallback(""),
new DecoderReplacementFallback(""));
byte[] ascii = encoding.GetBytes(text);
Run Code Online (Sandbox Code Playgroud)
要将非ASCII转换为最近的等效值:
string normalized = text.Normalize(NormalizationForm.FormKD);
var encoding = Encoding.GetEncoding
("us-ascii", new EncoderReplacementFallback(""),
new DecoderReplacementFallback(""));
byte[] ascii = encoding.GetBytes(normalized);
Run Code Online (Sandbox Code Playgroud)