现在的文本文件的编码方式到底有哪几种?特征码都分别是什么,希望高手给解答下。
我编写了如下的程序,结果还是有很多文本文件的编码是乱码。
但是用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种编码方式,但是除了网上流行的那几个外,我都不知道。
想让大家补充的就是,还有什么编码我没有考虑到的,最好大家能给个比较全面的。
分数不够的话,可以再加。
我编写了如下的程序,结果还是有很多文本文件的编码是乱码。
但是用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种编码方式,但是除了网上流行的那几个外,我都不知道。
想让大家补充的就是,还有什么编码我没有考虑到的,最好大家能给个比较全面的。
分数不够的话,可以再加。
这里就要指定编码方式吧。
StreamWriter的读方法会自动判编码格式的吧
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
可以不指定,
因为那个时候,我还不知道文件的具体编码呢。
只是先把那些作为二进制读进来,然后里面判断,用判断出来的指定。
但是,我不知道特征符号。
只知道上面我写的那几个。
还有什么,希望大家告诉我,现在可能主要集中在 utf8 上了,测试过程中,发现特征不止包容EFBB。其他的也有,
大家谁知道,希望告知一下。
不过,总感觉跟我上面给的程序差不多。
不成功,仍然出现乱码。 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;
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
http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html
注意帖子的例子,和下方的dll下载.也可以直接下载源代码用
我也正好遇到和你一样的问题,用这个可以很好的解决!!!!!!!!!!!!!
我也很感谢贴主,楼主弄好了,记得给分.
贴主的是针对网页比你读取txt还难些.
不需要考虑BOM
现在程序已经做完了,我把那些不能正确识别的文件都手动解决了,有一百多个文件,累人啊。那个帖子给的test程序有错误,哎。
不过,这些都无所谓了。现在的编码真的是越来越多了,也越来越怪异了,感觉有一些编码方式咱们根本就不知道。哎。准备结贴。
另外,你应该不会感到任何郁闷才对,因为你可以看看源代码,它几乎支持你所能看到所有的编码格式了.至于具体是什么语言.这个不是你的主帖所问的问题了.