i__0o0__
i__0o0__
2020-12-10 09:53
采纳率: 100%
浏览 230

c#的File.WriteAllText接口写入文件有时会使文件乱码

在windows系统上跑的winform程序;

File.WriteAllText(path, str, System.Text.Encoding.UTF8);

写入.json文件后,用记事本打开 文件内容变成了空白的;用notepad++打开文件内容就是很多NULL,且编码也成了ANSI

 

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

19条回答 默认 最新

  • bosaidongmomo
    bosaidongmomo 2020-12-10 13:06
    已采纳

    用流去写文件

    FileInfo file = new FileInfo(@"E:\学习笔记\C#平台\test.txt");//创建文件
            Console.WriteLine("创建时间:" + file.CreationTime);
            Console.WriteLine("路径:" + file.DirectoryName);
            StreamWriter sw = file.AppendText();//打开追加流
            sw.Write("李志伟");//追加数据
            sw.Dispose();//释放资源,关闭文件
            File.Move(file.FullName, @"E:\学习笔记\test.txt");//移动
            Console.WriteLine("完成!");
            Console.Read();
    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-10 13:26

    能解释下为什么吗

    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-10 15:08
    此方法使用不带字节序标记(BOM)的UTF-8编码,因此使用GetPreamble方法将返回一个空字节数组。如果必须在文件的开头包含UTF-8标识符(例如字节顺序标记),请使用带有UTF8编码的WriteAllText(String,String,Encoding)方法重载。
    
    给定一个字符串和一个文件路径,此方法将打开指定的文件,将该字符串写入该文件,然后关闭该文件。
    https://docs.microsoft.com/en-us/dotnet/api/system.io.file.writealltext?view=net-5.0
    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-10 15:09
    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-10 15:12

    看不到json数据格式怎么写的 我也不清楚了

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-10 15:31

    我调用的方法是指定了utf8编码的,json文件也的确有bom头。

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-10 15:33

    还是很感谢你的回答, 我需要几天测试,如果流写入的方式的确可以,我再回来采纳

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-10 15:34

     

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-10 15:35

    这个是我的json文件

    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-10 15:50

    能直接粘上来吗 我直接写代码 试一试

    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-10 17:18
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                string path = @"e:\test.json";
    
                // This text is added only once to the file.
                if (!File.Exists(path))
                {
                    // Create a file to write to.
                    String x = @"{'UserAgent':'Mozilla/5.0 (Windows NT 6. l; Win64;x64) App1eWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
    'AcceptLanguage': 'en-US,en;q=0.9',
    'HomepageURL': 'https://www.baidu.com',
    'NewTabURL': 'https://www.baidu.com',
    'InternalURL': 'ghb',
    'DownloadsURL': 'ghb://storage Ldownloads.html',
    'FileNotFoundURL': 'ghb://storage Lerrors/notFound.html',
    'CannotConnectuRL': 'ghb:/ /storage/errors/ cannotConnect.html'
    }";
                        String p=x.Replace("'", "\"");
                    File.WriteAllText(path, p);
                }
    
                // This text is always added, making the file longer over time
                // if it is not deleted.
                //string appendText = "This is extra text" + Environment.NewLine;
                //File.AppendAllText(path, appendText);
    
                // Open the file to read from.
                string readText = File.ReadAllText(path);
                Console.WriteLine(readText);
                Console.Read();
              
            }
        }
    }
    
    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 08:52

    抱歉啊,我昨天没看到,你这个代码是想说明什么呢,验证writeAllText写入文件?

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 08:55

    我只是想知道为什么我的文件会乱码

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 08:57

    你的代码应该验证不出来,因为我在本机测试的也从来没有出现过文件乱码

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 08:58

    在其它的电脑上也只是无规律的出现乱码

    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2020-12-11 09:05

    是没有规律吗?那你只能打log解决了

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 09:08

    就怕log中的内容正常,写入文件的内容还是乱码

    点赞 评论
  • i__0o0__
    i__0o0__ 2020-12-11 09:08

    没有头绪,只能改成流写入试试了

    点赞 评论
  • i__0o0__
    i__0o0__ 2021-02-22 11:57

    最后发觉这个问题应该不是File写入或者流写入的问题,应该是由于程序突然中断,导致文件写入失败,最后呈现NUL

    点赞 评论

相关推荐