本来是对另一个问题的情况补充(见http://topic.csdn.net/u/20110322/20/a56356ce-bc1c-490b-b847-546a952135ee.html)可是受到“同一用户,只能连续发贴3次”的限制,不得不再开一贴,——强烈希望CSDN改进规则。
————————————————————————
用下面的代码只能读出VS2008下建立的文本文件即(UTF8-带签名)的编码格式,读记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,中文主会变成乱码。
using (StreamReader sr = new StreamReader(文件名))
{
SQLCode = sr.ReadToEnd();
}
——————————————————————————————
用下面的代码可以正确地读出记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,而读VS2008下建立的文本文件即(UTF8-带签名)的编码格式,其他位置没事,第一个字符无论如何都会变成乱码,或者有一个不可打印的字符。
Encoding defaultEncode = Encoding.UTF8;//.ASCII;//.Unicode;
byte[] bytes = File.ReadAllBytes(FileName); //unicode.GetBytes(unicodeString);
char[] strChars = new char[defaultEncode.GetCharCount(bytes, 0, bytes.Length)];
defaultEncode.GetChars(bytes, 0, bytes.Length, strChars, 0); SQLCode = defaultEncode.GetString(bytes);
——————————————————————————————
因为看资料说(UTF8-带签名)的文本,前面有3个字节的BOM,所以将代码修改如下,想去除前面三个字节
int beginIndex = 3;
defaultEncode.GetChars(bytes, beginIndex, bytes.Length-begionIndex, strChars, 0);
可是读出来的文本,第一字符的乱码情况仍无法解决。
————————————————————————
用下面的代码只能读出VS2008下建立的文本文件即(UTF8-带签名)的编码格式,读记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,中文主会变成乱码。
using (StreamReader sr = new StreamReader(文件名))
{
SQLCode = sr.ReadToEnd();
}
——————————————————————————————
用下面的代码可以正确地读出记事本或VS2005建立的文本文件即(UTF8-无签名)的编码格式,而读VS2008下建立的文本文件即(UTF8-带签名)的编码格式,其他位置没事,第一个字符无论如何都会变成乱码,或者有一个不可打印的字符。
Encoding defaultEncode = Encoding.UTF8;//.ASCII;//.Unicode;
byte[] bytes = File.ReadAllBytes(FileName); //unicode.GetBytes(unicodeString);
char[] strChars = new char[defaultEncode.GetCharCount(bytes, 0, bytes.Length)];
defaultEncode.GetChars(bytes, 0, bytes.Length, strChars, 0); SQLCode = defaultEncode.GetString(bytes);
——————————————————————————————
因为看资料说(UTF8-带签名)的文本,前面有3个字节的BOM,所以将代码修改如下,想去除前面三个字节
int beginIndex = 3;
defaultEncode.GetChars(bytes, beginIndex, bytes.Length-begionIndex, strChars, 0);
可是读出来的文本,第一字符的乱码情况仍无法解决。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货