前言:
记得前不久,我在公司封闭式开发的日子里,我在宿舍的机子,被同学弄得满身病毒,其中之一是病毒在所有的html里者插入了一段iframe
之后我一不小心..编了段小程序来替换掉所有的iframe,当时忘了文件编码问题..
现在打开才发现一大堆乱码在里面
现在发现了..当然是要解决了:
简单看了一下文件流读出来的字节.做了简单的文件类型编码判断
代码如下:
1
/// <summary>
2
/// 获得文件编码
3
/// </summary>
4
/// <param name="content">文件流的字节数组</param>
5
/// <returns>字符编码</returns>
6
public static Encoding GetFileEncoding(byte[] content)
7
{
8
if (content.Length > 0)
9
{
10
switch (content[0])
11
{
12
case 104:
13
return Encoding.Default;
14
case 255:
15
return Encoding.Unicode;
16
case 254:
17
return Encoding.BigEndianUnicode;
18
case 239:
19
return Encoding.UTF8;
20
default:
21
return Encoding.Default;
22
}
23
}
24
return Encoding.Default;
25
}
这里只简单做了一下.有更复杂,自己扩展去吧!
/// <summary>2
/// 获得文件编码3
/// </summary>4
/// <param name="content">文件流的字节数组</param>5
/// <returns>字符编码</returns>6
public static Encoding GetFileEncoding(byte[] content)7
{8
if (content.Length > 0)9
{10
switch (content[0])11
{12
case 104:13
return Encoding.Default;14
case 255:15
return Encoding.Unicode;16
case 254:17
return Encoding.BigEndianUnicode;18
case 239:19
return Encoding.UTF8;20
default:21
return Encoding.Default;22
}23
}24
return Encoding.Default;25
}反正代码都写到了..再给出两段文件的读和写吧
/// <summary>
/// 读文件流
/// </summary>
/// <param name="stream">文件流;如:File.OpenRead(fileCurrentPath)</param>
/// <param name="encoding">字符编码;如:Encoding.UTF8</param>
/// <returns>流字符串</returns>
public static string ReadFromStream(FileStream stream, Encoding encoding)
{
byte[] content = new byte[stream.Length];
stream.Read(content, 0, content.Length);
stream.Close();
stream = null;
if (encoding == Encoding.Default)
{
encoding = GetFileEncoding(content);
}
return encoding.GetString(content);
}
public static string ReadFromStream(FileStream stream,out Encoding encoding)
{
byte[] content = new byte[stream.Length];
stream.Read(content, 0, content.Length);
stream.Close();
stream = null;
encoding = GetFileEncoding(content);
return encoding.GetString(content);
} 1
/// <summary>
2
/// 写文件流
3
/// </summary>
4
/// <param name="stream">文件流;如:File.OpenWrite(fileCurrentPath)</param>
5
/// <param name="encoding">字符编码;如:Encoding.UTF8</param>
6
/// <param name="Text">要写的字符串</param>
7
/// <returns>bool</returns>
8
public static bool WriteToStream(FileStream stream, Encoding encoding, string Text)
9
{
10
try
11
{
12
13
byte[] content = encoding.GetBytes(Text.Replace("\n", "\r\n"));
14
stream.SetLength(content.Length);
15
stream.Write(content, 0, content.Length);
16
stream.Close();
17
return true;
18
}
19
catch
20
{
21
return false;
22
}
23
}
/// <summary>2
/// 写文件流3
/// </summary>4
/// <param name="stream">文件流;如:File.OpenWrite(fileCurrentPath)</param>5
/// <param name="encoding">字符编码;如:Encoding.UTF8</param>6
/// <param name="Text">要写的字符串</param>7
/// <returns>bool</returns>8
public static bool WriteToStream(FileStream stream, Encoding encoding, string Text)9
{10
try11
{12

13
byte[] content = encoding.GetBytes(Text.Replace("\n", "\r\n"));14
stream.SetLength(content.Length);15
stream.Write(content, 0, content.Length);16
stream.Close();17
return true;18
}19
catch20
{21
return false;22
}23
}以上代码没有版权,想用拿去用,想改拿去改!
| 版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号
|
Donation(扫码支持作者):支付宝:
|
Donation(扫码支持作者):微信:
|
|



浙公网安备 33010602011771号