如何更改中的后备字符

时间:2019-03-07 17:24:50

标签: c# .net

我想从一个字符串创建纯ASCII文本文件。所以我使用File.WriteAllText编码Encoding.ASCII:

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

遇到非ASCII字符时,他将转换为“?”。如何指定Encoding.ASCII或File.WriteAllText以使用除'之外的其他字符?作为后备角色?

1 个答案:

答案 0 :(得分:3)

您需要使用与所需内容匹配的其他编码对象。例如,要使用字符串"[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