zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    图书管理系统登录界面
    图书管理系统的管理者界面
    图书管理系统-servlet层
    图书管理系统的dao层
    Linux 内核优化
    第十一章 Nginx之服务代理
    第十章 Nginx之LNMP拆分
    第九章 Nginx之LNMP架构
    第八章 Nginx常用模块
    第七章 WEB服务之Nginx
  • 原文地址:https://www.cnblogs.com/jinshizuofei/p/3405385.html
Copyright © 2011-2022 走看看