文件编码不起作用

时间:2014-04-10 08:30:17

标签: c# file encoding streamwriter

在我的代码中

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?没有帮助。

有什么问题?

1 个答案:

答案 0 :(得分:1)

当Unicode字符无法转换为目标代码页时,您可以使用Encoding.GetEncoding的其他重载来处理所有情况。有关此MSDN topic的更多信息。 如果您明确设置Encoding.EncoderFallback属性(link to MSDN)。

,则可以实现相同的目的

例如,每次转换一个Unicode字符失败时,您都可以使用以下命令抛出异常:

Encoding enc = Encoding.GetEncoding(28605, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);

注意:默认EncoderFallbackSystem.Text.InternalEncoderBestFitFallback,会为未知代码点生成问号。