如何判断一个文本文件是gb2312格式还是utf8格式

上海程序员3 2006-12-25 11:17:52
如何判断一个文本文件是gb2312格式还是utf8格式
我找到一段代码,如下,但并不正确
Sample code as follows:
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
if( sr.CurrentEncoding.Equals( Encoding.Utf8 ) )
Debug.WriteLine( "Utf8 encoding" );
}
...全文
1439 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
OriesMap 2006-12-26
  • 打赏
  • 举报
回复
也顶一把。
mood8125 2006-12-26
  • 打赏
  • 举报
回复
mark
smallboy_5 2006-12-25
  • 打赏
  • 举报
回复
楼主的代码是对的。
上海程序员3 2006-12-25
  • 打赏
  • 举报
回复
楼上的代码不灵呀,明明是gb2312的,结果它也认为是utf8格式
liujia_0421 2006-12-25
  • 打赏
  • 举报
回复
if (sr.CurrentEncoding.Equals(System.Text.UTF8Encoding.UTF8 ))
{
Console.WriteLine("utf8");
}
cangwu_lee 2006-12-25
  • 打赏
  • 举报
回复

根据汉字编码,但这个不能每一个字都能判断得出来的。但,一句话应该可以判断。

--------------------------------------------------------------
程序,犹如人生。
chenxdb 2006-12-25
  • 打赏
  • 举报
回复
在UTF文件中前面多了三個字節具體為:EFBBBF
dinglantao 2006-12-25
  • 打赏
  • 举报
回复
我也正等待高人答案
上海程序员3 2006-12-25
  • 打赏
  • 举报
回复
但怪的是editplus还没有碰到识别不了的文本文件格式,应该有标识的地方吧。
syczx 2006-12-25
  • 打赏
  • 举报
回复
把文件编码格式码写在文件前三个字节,这是文本文件的标准格吗?
就是说,也许notepad是这样写在文件前三个字节,能保证别的软件(比楼上说的editplus等)也是写在这个位置,也用这些代码吗?
my_infinity 2006-12-25
  • 打赏
  • 举报
回复
好象文件在经网络传输时都是预转成了UTF-8了哟?
my_infinity 2006-12-25
  • 打赏
  • 举报
回复
有谁能解释 liujia_0421(SnowLover) 有那么点。。问题的原因呢,谢谢
上海程序员3 2006-12-25
  • 打赏
  • 举报
回复
楼上的能传个代码给我么,我邮箱是a9a@163.com,我那论坛http://www.3http.com也可以上传文件的。

我上面发的代码都试了无效果,我的是文本文件,用editplus保存时选择了格式,但怪的是editplus就能正确判断,用UEStudio也能判断出格式来。
VirtualDesktop 2006-12-25
  • 打赏
  • 举报
回复
判断前3字节啊:EFBBBF
这个保管好用的,我都用了很久的了
LeoMaya 2006-12-25
  • 打赏
  • 举报
回复
汗...

mark
上海程序员3 2006-12-25
  • 打赏
  • 举报
回复
我试了,但还是一样,没有效果,这回是明明用了utf8格式,却它硬是显示说是gb2312。
yitian130 2006-12-25
  • 打赏
  • 举报
回复
study,study~! study~!
smallboy_5 2006-12-25
  • 打赏
  • 举报
回复
//保存当前Seek位置
stream.Seek(0, SeekOrigin.Begin);
int nByte = stream.ReadByte();
byte1 = Convert.ToByte(nByte);
byte2 = Convert.ToByte(stream.ReadByte());

if (stream.Length >= 3)
{
byte3 = Convert.ToByte(stream.ReadByte());
}

if (stream.Length >= 4)
{
byte4 = Convert.ToByte(stream.ReadByte());
}
//根据文件流的前4个字节判断Encoding
//Unicode {0xFF, 0xFE};
//BE-Unicode {0xFE, 0xFF};
//UTF8 = {0xEF, 0xBB, 0xBF};
if (byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe
{
targetEncoding = Encoding.BigEndianUnicode;
}

if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode
{
targetEncoding = Encoding.Unicode;
}

if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8
{
targetEncoding = Encoding.UTF8;
}
详细的看上面的文章就可以了
zhedouyou 2006-12-25
  • 打赏
  • 举报
回复
up
runrunrun 2006-12-25
  • 打赏
  • 举报
回复
判前三个字节:EFBBBF
加载更多回复(5)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧