问题描述
在进行文本文件(.txt)的读取时,需要指定其编码,但现实中我们往往不知道所处理文件的编码(例如这个文件是通过OpenFileDialog选取的,或者面对大量文件,有各种各样的编码格式)所以我们需要获取指定文件的编码我试图用StreamReader(string,Encoding,true)来读取文件,但我发现竟然跟StreamReader(string,Encoding)是一样的(不解中....)我们打开一个文本文件,点另存为,可以看到该文件的编码.既然系统都可以获得文件的编码,想必通过编程也可以吧?
解决方案
解决方案二:
通常都是判斷文件開頭的幾個字節.FFFE开头的是“unicode文件”,FEFF开头的是“unicodebigendian文件”,EFBBBF开头的是“utf-8文件"。其他的,就要猜了,通常如果不是上述三種,大多人會直接使用System.Text.Encoding.Default來讀取,就是本機默認字符集
解决方案三:
简单的判断文件编码是否为:UnicodeUnicodeBIGUTF-8publicclassEncodingType{publicstaticSystem.Text.EncodingGetType(stringFILE_NAME){FileStreamfs=newFileStream(FILE_NAME,FileMode.Open,FileAccess.Read);System.Text.Encodingr=GetType(fs);fs.Close();returnr;}publicstaticSystem.Text.EncodingGetType(FileStreamfs){byte[]Unicode=newbyte[]{0xFF,0xFE};byte[]UnicodeBIG=newbyte[]{0xFE,0xFF};byte[]UTF8=newbyte[]{0xEF,0xBB,0xBF};BinaryReaderr=newBinaryReader(fs,System.Text.Encoding.Default);byte[]ss=r.ReadBytes(3);r.Close();//编码类型Coding=编码类型.ASCII;if(ss[0]-#62;=0xEF){if(ss[0]==0xEF-#38;-#38;ss[1]==0xBB-#38;-#38;ss[2]==0xBF){returnSystem.Text.Encoding.UTF8;}elseif(ss[0]==0xFE-#38;-#38;ss[1]==0xFF){returnSystem.Text.Encoding.BigEndianUnicode;}elseif(ss[0]==0xFF-#38;-#38;ss[1]==0xFE){returnSystem.Text.Encoding.Unicode;}else{returnSystem.Text.Encoding.Default;}}else{returnSystem.Text.Encoding.Default;}}}
解决方案四:
網上搜索的一個類,可以大概判斷publicclassEncodingType{publicstaticSystem.Text.EncodingGetType(stringFILE_NAME){FileStreamfs=newFileStream(FILE_NAME,FileMode.Open,FileAccess.Read);System.Text.Encodingr=GetType(fs);fs.Close();returnr;}publicstaticSystem.Text.EncodingGetType(FileStreamfs){byte[]Unicode=newbyte[]{0xFF,0xFE};byte[]UnicodeBIG=newbyte[]{0xFE,0xFF};byte[]UTF8=newbyte[]{0xEF,0xBB,0xBF};BinaryReaderr=newBinaryReader(fs,System.Text.Encoding.Default);byte[]ss=r.ReadBytes(3);r.Close();//编码类型Coding=编码类型.ASCII;if(ss[0]>=0xEF){if(ss[0]==0xEF&&ss[1]==0xBB&&ss[2]==0xBF){returnSystem.Text.Encoding.UTF8;}elseif(ss[0]==0xFE&&ss[1]==0xFF){returnSystem.Text.Encoding.BigEndianUnicode;}elseif(ss[0]==0xFF&&ss[1]==0xFE){returnSystem.Text.Encoding.Unicode;}else{returnSystem.Text.Encoding.Default;}}else{returnSystem.Text.Encoding.Default;}}}
解决方案五:
帮顶下