在我的代码中
string[] Lines = reactor.GetMergedLines();
string fileName = "foo.bar";
StreamWriter sw = new StreamWriter(File.Open(fileName, FileMode.CreateNew), Encoding.GetEncoding(28605));
foreach (string line in Lines)
{
sw.WriteLine(line);
}
sw.Close();
创建的文件未使用给定的代码页进行编码。行填充了iso-8859-1文件中的字符串。我尝试使用代码页编号Encoding.GetEncoding(28605)
,它的名称Encoding.GetEncoding("ISO-8859-15")
和File.WriteAllLines(fileName, Lines, Encoding.GetEncoding(28605))
而不是StreamWriter。但是,如果我看一下cygwin file -bi [filename]
的文件,它告诉我,编码将是" us-ascii"。此外,某些字符未被正确编码并被问号替换。
How to write out a text file in C# with a code page other than utf-8?没有帮助。
有什么问题?
答案 0 :(得分:1)
当Unicode字符无法转换为目标代码页时,您可以使用Encoding.GetEncoding
的其他重载来处理所有情况。有关此MSDN topic的更多信息。
如果您明确设置Encoding.EncoderFallback
属性(link to MSDN)。
例如,每次转换一个Unicode字符失败时,您都可以使用以下命令抛出异常:
Encoding enc = Encoding.GetEncoding(28605, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
注意:默认EncoderFallback
为System.Text.InternalEncoderBestFitFallback
,会为未知代码点生成问号。