【发布时间】:2014-05-23 20:17:50
【问题描述】:
在我的代码中
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? 没有帮助,如您所见。
有什么问题?
【问题讨论】:
-
some characters aren't encoded properly and replaced by question marks你怎么知道的?您用来查看文件的工具是否能够设置所需的代码页?file无法猜测文件是 ISO-8859-15 编码的,没有元数据。您需要使用 ISO-8859-15 解码读取文件才能判断是否正确保存。 -
我用notepad++试了一下,把编码设置为ISO-8859-15。也与其他文本查看器一起使用。还是问号。这些不是编码未知字符的标准字符。
-
您保存的文本是有效的 ISO-8859-15 文本吗?
-
@RemusRusanu 你这是什么意思?怎么会无效?
-
ISO-8859-15 是“8 位单字节编码图形字符集”。它可以编码的字符集是有限的,大约有 255 个。你的 C#
string是 Unicode,有数万个有效的code points。显然,并非所有 C# 字符串值都具有等效的有效单字节代码页。
标签: c# file encoding streamwriter