• c#中文件读写的编码格式


    c#中的File类为我们提供了方便的文件读写方法,本来写文件的时候,我是从来不写编码格式的,后来发现,读文件的时候,有时候会出现乱码。

    WriteAllText和ReadAllText的默认编码格式是什么呢?自己新建的txt文件又是什么编码格式呢?看了看网上的讲解,自己也试了试,总结一下。

    1.如果是读自己程序里面写的文件是没有任何问题的。

    File.WriteAllText("E:\Codes\new.txt","程序写的。。。");
    
    string str = File.ReadAllText("E:\Codes\new.txt");
    

     这样写是没有问题的,因为程序里面肯定默认的是同一种编码格式。

    2.那么,默认的编码格式是什么呢?

    string str = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("unicode"));
    string str1 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-7"));
    string str2 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-8"));
    string str3 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-16"));
    string str4 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("GB2312"));

    ---------------------------

    ---------------------------
    str:꣧�辺蛥�蒚胣�芀胣憂慡,

    str1:程序写的。。。aaa,

    str2:程序写的。。。aaa,

    str3:꣧�辺蛥�蒚胣�芀胣憂慡,

    str4:绋嬪簭鍐欑殑銆傘€傘€俛aa
    ---------------------------
    确定
    ---------------------------

    比较一下几种编码方式,就很明显了,默认的是uft-8的编码格式,其实我一直以为utf-16会兼容uft-8的。。。

    3.新建的文本文件,默认的编码格式是什么?手动新建一个文件readme.txt.

    string str = File.ReadAllText("E:\Codes\readme.txt", System.Text.Encoding.GetEncoding("unicode"));
    string str1 = File.ReadAllText("E:\Codes\readme.txt", System.Text.Encoding.GetEncoding("utf-7"));
    string str2 = File.ReadAllText("E:\Codes\readme.txt", System.Text.Encoding.GetEncoding("utf-8"));
    string str3 = File.ReadAllText("E:\Codes\readme.txt", System.Text.Encoding.GetEncoding("utf-16"));
    string str4 = File.ReadAllText("E:\Codes\readme.txt", System.Text.Encoding.GetEncoding("GB2312"));

    ---------------------------

    ---------------------------
    str:�쟊믒�퓊쒵쓎ﺼ慡,

    str1:ÕâÊÇÒ»¸ö²âÊÔµÄÎļþaaa,

    str2:����һ�����Ե��ļ�aaa,

    str3:�쟊믒�퓊쒵쓎ﺼ慡,

    str4:这是一个测试的文件aaa
    ---------------------------
    确定
    ---------------------------

    windows默认的新建文本文件的格式是GB2312,但是utf-7和utf-8还是可以读出英文的。

    4.在实验的时候我还发现了一个有趣的现象,使用WriteAllText默认的编码格式创建的文件,直接读是只能用utf-8格式的,但是打开文件,手动修改文件之后,不选择另存为更改编码格式,直接保存,得到的结果是:

    string str = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("unicode"));
    string str1 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-7"));
    string str2 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-8"));
    string str3 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("utf-16"));
    string str4 = File.ReadAllText("E:\Codes\new.txt", System.Text.Encoding.GetEncoding("GB2312"));

    ---------------------------

    ---------------------------
    str:程序写的啊。。。bbb,

    str1:程序写的啊。。。bbb,

    str2:程序写的啊。。。bbb,

    str3:程序写的啊。。。bbb,

    str4:程序写的啊。。。bbb
    ---------------------------
    确定
    ---------------------------

    全都可以准确的读出来了,真是一个诡异的事情,这时候,用的又是什么编码格式呢?另存为下的默认编码是文件本身的编码格式,这个文件还是utf-8的,编码格式没有变化。

    同理,将手动新建的文本文件另存为utf-8编码格式的文件,程序中也是可以读出来的,看来,windows创建文件的方法,貌似跟WriteAllText还是有些区别的。

    那个同学有兴趣的可以去看看更详细的教程,http://www.cnblogs.com/bitfan/archive/2010/11/25/1887590.html

  • 相关阅读:
    Vue(七)-- 插件
    Vue(六)-- 过滤器、常用内置指令、自定义指令
    Vue(五)-- 生命周期
    Vue(四)-- 事件处理(绑定监听、按键修饰符、取消冒泡、阻止默认事件),v-model的使用
    Two Sum 两数之和
    使用原生JavaScript实现sleep函数
    感恩
    关于AJAX的总结和思考-2
    关于AJAX的一点总结与思考-1
    DNS解析和前端优化点之一
  • 原文地址:https://www.cnblogs.com/jinshizuofei/p/3405385.html
Copyright © 2020-2023  润新知