C# 如何更改中的回退字符

C# 如何更改中的回退字符,c#,.net,C#,.net,我想从字符串创建一个纯ASCII文本文件。因此,我将File.writealText与encoding.ASCII一起使用: File.WriteAllText(_param.pathFileOut + "\\" + _param.batch_id + DateTime.Now.ToString("yyyyMMdd") + ".txt", _fileOut, Encoding.ASCII); 遇到非ASCII字符时,会将其转换为“?”。如何指定Encoding.ASCII或File.write

我想从字符串创建一个纯ASCII文本文件。因此,我将File.writealText与encoding.ASCII一起使用:

File.WriteAllText(_param.pathFileOut + "\\" + _param.batch_id + DateTime.Now.ToString("yyyyMMdd") + ".txt", _fileOut, Encoding.ASCII);

遇到非ASCII字符时,会将其转换为“?”。如何指定Encoding.ASCII或File.writealText以使用“?”以外的其他字符作为回退字符?

您需要使用与所需匹配的其他编码对象。例如,要使用字符串
“[NON-ASCII]”
替换编码和解码,可以使用:

var encoding = Encoding.GetEncoding(
  "US-Ascii",
  new EncoderReplacementFallback("[NON-ASCII]"),
  new DecoderReplacementFallback("[NON-ASCII]"));

File.WriteAllText(
  _param.pathFileOut + "\\" + _param.batch_id + DateTime.Now.ToString("yyyyMMdd") + ".txt",
  _fileOut,
  encoding);
很明显,我们不能在
EncoderReplacementFallback
中使用不能用所讨论的编码进行编码的字符。如果我们尝试这一点,它是可以接受的,但如果需要更换,它将抛出。不过,我们可以将这些字符用于解码器:

var encoding = Encoding.GetEncoding(
    "US-Ascii",
    new EncoderReplacementFallback("�"),
    new DecoderReplacementFallback("�"));
Console.WriteLine(encoding.GetString(new byte[]{234})); // Prints �
var bytes = encoding.GetBytes("þ"); // Throws Argument Exception:
                                    // Recursive fallback not allowed for character \uFFFD.
                                    // Parameter name: chars

或者您可以抛出异常,以便用户知道您正在丢弃他们的数据。考虑一下这是否适用于你的情况。