我想从一个字符串创建纯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以使用除'之外的其他字符?作为后备角色?
答案 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