当前位置: 首页 > 编程语言 > C#

如何在文件编码未知时使用ReadAllText分享

时间:2023-04-10 19:42:46 C#

C#学习教程:文件编码未知时如何使用ReadAllText分享文件编码未知时如何使用ReadAllText我正在使用ReadAllText读取文件String[]values=File.ReadAllText(@"c:\c\file.txt").Split(';');诠释我=0;foreach(Stringsinvalues){System.Console.WriteLine("output:{0}{1}",i,s);我++;如果我试图读取一些文件,我有时会得到错误的字符(对于?ü?...)。输出就像'?',因为编码有一些问题:output:0TESToutput:1A??O?一种解决方法是在ReadAllText中设置编码,像ReadAllText(@"c:\c\file.txt",Encoding.UTF8)可以解决问题。但是,如果我仍然得到'?’作为输出?如果我不知道文件的编码怎么办?如果每个文件都有不同的编码怎么办?在C#中执行此操作的最佳方法是什么?谢谢可靠地执行此操作的唯一方法是在文本文件的开头查找字节顺序标记。(这个blob更一般地表示所用字符编码的字节顺序,但也表示编码-例如UTF8、UTF16、UTF32)。不幸的是,此方法仅适用于基于Unicode的编码,在此之前无效(必须使用不太可靠的方法)。StreamReader类型支持检测这些标志以确定编码-您只需将标志传递给参数:newSystem.IO.StreamReader("path",true)然后您可以检查stremReader.CurrentEncoding的值以确定使用的编码由文件。但请注意,如果没有字节编码标志,CurrentEncoding将默认为Encoding.Default。请参阅codeproject解决方案来检测编码您必须先检查文件编码。试试这个以上是C#学习教程:文件编码未知时如何使用ReadAllText分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——System.Text.Encodingenc=null;System.IO.FileStreamfile=newSystem.IO.FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read);如果(file.CanSeek){byte[]bom=newbyte[4];//获取字节序标记,如果有一个文件。读(bom,0,4);if((bom[0]==0xef&&bom[1]==0xbb&&bom[2]==0xbf)||//utf-8(bom[0]==0xff&&bom[1]==0xfe)||//ucs-2le、ucs-4le和ucs-16le(bom[0]==0xfe&&bom[1]==0xff)||//utf-16和ucs-2(bom[0]==0&&bom[1]==0&&bom[2]==0xfe&&bom[3]==0xff))//ucs-4{enc=System.Text.Encoding.Unicode;}else{enc=System.Text.Encoding.ASCII;}//现在将文件光标重新定位回文件的开头file.Seek(0,System.IO.SeekOrigin.Begin);}else{//该文件不能被随机访问,所以你需要决定将默认值设置为什么//基于提供的数据。如果您期望来自许多旧应用程序的数据,//将您的编码默认为Encoding.ASCII。如果您期望来自很多较新的//应用程序的数据,请将您的编码默认为Encoding.Unicode。此外,由于二进制文件是//基于单字节的,因此您将希望使用Encoding.ASCII,即使您可能//永远不需要使用编码,因为编码类实际上是为了获取//字符串来自文件的字节数组。enc=System.Text.Encoding.ASCII;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: