C# 如何更改中的回退字符
我想从字符串创建一个纯ASCII文本文件。因此,我将File.writealText与encoding.ASCII一起使用: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
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
或者您可以抛出异常,以便用户知道您正在丢弃他们的数据。考虑一下这是否适用于你的情况。