【发布时间】:2021-04-24 02:45:42
【问题描述】:
使用以下内容尝试以 ANSI 编写文本文件,但打开时仍显示 UTF-8。 ANSI格式怎么写?这是在 Windows 10 上。在记事本++ 或记事本右下角,当我打开不同的文本文件时,它会显示 ANSI 或 UTF-8。我的程序生成的那个是 UTF-8。
private void createHeader()
{
StringBuilder sb = new StringBuilder();
string delimiter = "ª";
sb.Append(batchNumber);
sb.Append(delimiter);
sb.Append("Delete PLUs");
sb.Append(delimiter);
string today = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
//Console.WriteLine(today);
sb.Append(today);
for (int i =0; i < 15; i++)
{
sb.Append(delimiter);
}
sb.Append(Environment.NewLine);
Console.WriteLine(sb.ToString());
System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(new FileStream(pathToFile, FileMode.OpenOrCreate), Encoding.ASCII);
objWriter.WriteLine(sb.ToString());
objWriter.Close();
//System.IO.File.WriteAllText(pathToFile, sb.ToString(), Encoding.ASCII); // Erases current file and overwrite
//return sb.ToString();
}
【问题讨论】:
-
首先,您正在编写 ASCII,而不是 ANSI,这将导致您的分隔符应替换为问号,因为它不是 ASCII 字符集的一部分。对于 ANSI,使用
Encoding.GetEncoding("iso-8859-1")作为最常见的 ANSI 编码。其次,它在哪里显示为 UTF-8?由于 UTF-8 是 ASCII 的超集,因此如果您打开 ASCII 文件,应用程序会将编码显示为 UTF-8,这是可以理解的。 -
ANSI 是一个位于美国的组织。您实际尝试使用哪种编码?您的本地编码?视窗 1252?通用拉丁语-1? ASCII(UTF-8 编码相同的 CodePoints,因为它是兼容的,而不是偶然的)?
-
“打开时仍然显示 UTF-8”是什么意思?怎么开的?
-
在notepad++或notepad右下角,当我打开不同的文本文件时,它会显示ANSI或UTF-8。我的程序生成的那个是 UTF-8。
-
ANSI 是微软很久以前采用的通用名称。它本身没有任何意义。它仍然被使用(因为它以某种方式卡住)来定义通用文本编码,当实际编码未知时,它是 Windows 1252 或旧的
iso-8859-1(已弃用)或使用本地编码时(Encoding.Default),它使用特定于本地语言的扩展字符。如果您对此没有非常具体的要求,那就使用普遍理解的 UTF-8。本地编码通常只能在本地解释,在其他地方读取时会产生垃圾。
标签: c# text character-encoding