源文件是UNICODE格式,用C#的Encoding.Convert转换成GB2312后,文件体积比直接用记事本打开另存为GB2312的多一个字节。打开用c#转换后的GB2312文件,比用记事本打开另存为的GB2312文件在文件的最前面多了一个“?”号。请问这是为什么呢?谢谢!
解决方案 »
- 异步socket接收服务端信息和开线程进行心跳发送,不知为什么,每次心跳等待结束后,才会收到服务端信息
- 【在线等待】如何遍历treeview得到所有最底层节点的text,保存到List中!
- 求C#编写的斑马打印程序(能打印2唯条码)
- 问个关于UDP断口处理的问题
- 如何判断当前内存中是否有某个类Student的实例存在
- ini文件有字节限制吗?
- 招聘技术专家
- DataSet.Relations.Add
- 在DataGrid中,如何不选择文本?
- 在windows应用程序中如的输出语句是什么啊
- DataGridView 删除行问题 100分
- 怎么让程序(winform,webform)debug运行时用debugview查看运行轨迹?
/// 从一种编码到另一种编码
/// </summary>
/// <param name="str">源字符串</param>
/// <param name="From">From</param>
/// <param name="To">To</param>
/// <returns></returns>
string ConertStr(string str, string From, string To)
{ byte[] bs = System.Text.Encoding.GetEncoding(From).GetBytes(str);
bs = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(From), System.Text.Encoding.GetEncoding(To), bs);
string res = System.Text.Encoding.GetEncoding(To).GetString(bs);
return res; }=================================
http://blog.csdn.net/hertcloud/
记事本是通过文件的首字节来判断文件格式的如果是Unicode则以0xFF,0xFE开头
如果是Utf8则以0xEF,0xBB,0xBF开头
Unicode则以0xFF,0xFE开头
Utf8则以0xEF,0xBB,0xBF开头
结尾都是一样的,所以会多一个字节
{
int i = 0;
if (UnicodeContentBytes.Length > 2 && UnicodeContentBytes[0] == 0xFF &&
UnicodeContentBytes[1] == 0xFE) i = 2;
return Encoding.Convert(Encoding.Unicode,
Encoding.GetEncoding("GB2312"), UnicodeContentBytes, i,
UnicodeContentBytes.Length - i);
}