怎么取得一个TXT文件的编码方式?

whalefish2001 2009-01-21 04:36:03
现在的文本文件的编码方式到底有哪几种?特征码都分别是什么,希望高手给解答下。
我编写了如下的程序,结果还是有很多文本文件的编码是乱码。
但是用editplus打开,就是正常的。
先贴出我的程序片段:

//扩展名未必是txt,但是肯定是以本文方式记录的。这个程序是反复调用的,处理的文件肯定超过几百个,所以,大家不要建议我用UE打开,然后分别看每个文件的编码。

string url = msFileUrl.Text + msFileName.Text;
FileStream str2 = new FileStream(@url, FileMode.Open);
byte[] arr = new byte[20971520];//一般不会有超过20兆的文本文件,但是,肯定超过2K。

string str = null;

str2.Read(arr, 0, 20971520);
str2.Close();

string s = "";
for (int i = 0; i < 500; i++)
{
s += Convert.ToInt32(arr[i].ToString()).ToString("X");
}

string filetype = "";
Encoding myencode = null;

if (s.Contains("EFBB"))
{
filetype = "utf8";
myencode = Encoding.UTF8;
str = myencode.GetString(arr);
}
else if (s.Contains("FFFE"))
{
filetype = "Unicode";
myencode = Encoding.Unicode;
str = myencode.GetString(arr);
}
else if (s.Contains("FEFF"))
{
filetype = "Unicode big endian";
myencode = Encoding.BigEndianUnicode;
str = myencode.GetString(arr);
}
else
{
filetype = "ANSI";
myencode = Encoding.Default;
str = myencode.GetString(arr);
}

int strlen = str.Length;
for (int i = 0; i < strlen; i++)
{
if (str[i].ToString() == "\0")
{
str = str.Substring(0, i);
break;
}
}

restext.Text = str;

//myencode 是有用的,我后面还要用同样的编码方式,生成文件。


这个程序其实,就是打开现有文件,在指定的位置插入几行文字,然后再把那个文件覆盖掉。(这些都实现了,就是遇到有些文件包含的中文时,会出乱码)

我通过EditPlus选择编码,发现最少有60种编码方式,但是除了网上流行的那几个外,我都不知道。
想让大家补充的就是,还有什么编码我没有考虑到的,最好大家能给个比较全面的。
分数不够的话,可以再加。

...全文
2542 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
woxinyongheng0801 2010-09-06
  • 打赏
  • 举报
回复
碰到类似的问题。新手学习了。
whalefish2001 2009-02-03
  • 打赏
  • 举报
回复
:)
putuo 2009-01-22
  • 打赏
  • 举报
回复
我上面的那个是针对内容的所有编码进行的测试然后得到结果,我试过了,很好用.
不需要考虑BOM
putuo 2009-01-22
  • 打赏
  • 举报
回复
楼主打开这个网页
http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html
注意帖子的例子,和下方的dll下载.也可以直接下载源代码用
我也正好遇到和你一样的问题,用这个可以很好的解决!!!!!!!!!!!!!
我也很感谢贴主,楼主弄好了,记得给分.
贴主的是针对网页比你读取txt还难些.
优途科技 2009-01-22
  • 打赏
  • 举报
回复
.NET默认的编码是UTF-8,无法读取GB2312的文件,这种情况下一般用:
StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);
来解决。true是让Framework来检测Byte Order Mask(BOM),如果文件有BOM,就会根据BOM设置成文件实际的编码,如果没有BOM,就按第二个参数所制定的编码来读取。
这是一种比较好的兼容方式,如果不设置true,那么就只能读取GB2312文件,而无法读取Utf-8了。
Default依赖于操作系统的语言设置,如果读简体中文,就用gb2312
youxihe 2009-01-22
  • 打赏
  • 举报
回复
首先按你的方法判断是否是UTF8,如果不是,sr = new StreamReader(path,Encoding.Default);是的话sr = new StreamReader(path,Encoding.UTF8)
putuo 2009-01-22
  • 打赏
  • 举报
回复
楼主,那个给的测试有一个小错误,一个found的bool变量没有声明,因为贴主也是从那个作者那里copy下来的.你试试
另外,你应该不会感到任何郁闷才对,因为你可以看看源代码,它几乎支持你所能看到所有的编码格式了.至于具体是什么语言.这个不是你的主帖所问的问题了.
whalefish2001 2009-01-22
  • 打赏
  • 举报
回复
看了看 http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html 下面附带的源代码,果然支持的编码多了一些,但是,还是不能把所有问题都解决。
现在程序已经做完了,我把那些不能正确识别的文件都手动解决了,有一百多个文件,累人啊。

那个帖子给的test程序有错误,哎。
不过,这些都无所谓了。

现在的编码真的是越来越多了,也越来越怪异了,感觉有一些编码方式咱们根本就不知道。哎。

准备结贴。
iamfafa 2009-01-21
  • 打赏
  • 举报
回复
要通过流中的字节来分析的吧
hubofly 2009-01-21
  • 打赏
  • 举报
回复
保存的时候,是可以设置保存的编码格式的,设置一下应该就好了
hbmy9107lwt 2009-01-21
  • 打赏
  • 举报
回复
big5
whalefish2001 2009-01-21
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);
不成功,仍然出现乱码。

string url = msFileUrl.Text + msFileName.Text;

StreamReader sr = new StreamReader(@url, System.Text.Encoding.GetEncoding(936), true);
string m;
m = sr.ReadToEnd();
restext.Text = m;
sr.Close();
return;

whalefish2001 2009-01-21
  • 打赏
  • 举报
回复
看了看 http://www.cnblogs.com/litianfei/archive/2008/04/01/1133122.html 很好,
不过,总感觉跟我上面给的程序差不多。
HDNGO 2009-01-21
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);

自己会根据BOM设置成文件实际的编码的吧~


whalefish2001 2009-01-21
  • 打赏
  • 举报
回复
由于文件的编码我是不知道的,需要在程序中判断,如果知道的话,我就可以直接使用了。
我要的就是那个判断过程。其余的都不重要。
HDNGO 2009-01-21
  • 打赏
  • 举报
回复
看看。。看看。。里边有个读写的类~

http://www.cnblogs.com/litianfei/archive/2008/04/01/1133122.html
whalefish2001 2009-01-21
  • 打赏
  • 举报
回复
FileStream str2 = new FileStream(@url, FileMode.Open);
可以不指定,
因为那个时候,我还不知道文件的具体编码呢。
只是先把那些作为二进制读进来,然后里面判断,用判断出来的指定。
但是,我不知道特征符号。
只知道上面我写的那几个。
还有什么,希望大家告诉我,现在可能主要集中在 utf8 上了,测试过程中,发现特征不止包容EFBB。其他的也有,
大家谁知道,希望告知一下。
ztenv 2009-01-21
  • 打赏
  • 举报
回复
读文件时可以设置用默认的编码方式,否则在读文件时会很麻烦的,经常乱码;
HDNGO 2009-01-21
  • 打赏
  • 举报
回复
.NET默认的编码是UTF-8,无法读取GB2312的文件,这种情况下一般用:
StreamReader sr = new StreamReader(@"C:\a.txt", System.Text.Encoding.GetEncoding(936),true);
来解决。true是让Framework来检测Byte Order Mask(BOM),如果文件有BOM,就会根据BOM设置成文件实际的编码,如果没有BOM,就按第二个参数所制定的编码来读取。
这是一种比较好的兼容方式,如果不设置true,那么就只能读取GB2312文件,而无法读取Utf-8了。

Default依赖于操作系统的语言设置,如果读简体中文,就用gb2312
xstong1982 2009-01-21
  • 打赏
  • 举报
回复
StreamWriter s = new StreamWriter(fileStream)
StreamWriter的读方法会自动判编码格式的吧
加载更多回复(3)

111,097

社区成员

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

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

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