【问题标题】:Writing text file how to force ANSI format C#编写文本文件如何强制ANSI格式C#
【发布时间】: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


【解决方案1】:

使用编码 1252。

using (TextWriter tw = new StreamWriter(pathToFile, true, Encoding.GetEncoding(1252)))
{
          tw.WriteLine(sb.ToString());
}

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多