以下是包含我的问题描述的代码:
我需要找到这个文件的编码,但现在不是!
string FilePath = @"C:\01 New.txt";
System.IO.FileStream inFile = new System.IO.FileStream(FilePath, System.IO.FileMode.Open,System.IO.FileAccess.Read);
byte[] binaryData = new Byte[inFile.Length];
long bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
inFile.Close();
string base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length);// Converting ToBase64String
Console.WriteLine("base64String is " + base64String);
请假设上述过程由其他内容完成,并且只返回“base64String”。现在我需要正确阅读。
为此,我需要base64String的“ENCODING”:
byte[] s = Convert.FromBase64String(base64String);
switch (GET_ENCODING(base64String))
{
case "ASCII":
Console.WriteLine("ASCII text is " + Encoding.ASCII.GetString(s).Trim()); break;
case "Default":
Console.WriteLine("Default text is " + Encoding.Default.GetString(s).Trim()); break;
case "UTF7":
Console.WriteLine("UTF7 text is " + Encoding.UTF7.GetString(s).Trim()); break;
case "UTF8":
Console.WriteLine("UTF8 text is " + Encoding.UTF8.GetString(s).Trim()); break;
case "BigEndianUnicode":
Console.WriteLine("BigEndianUnicode " + Encoding.BigEndianUnicode.GetString(s).Trim()); break;
case "UTF32":
Console.WriteLine("UTF32 text is " + Encoding.UTF32.GetString(s).Trim()); break;
default:
break;
}
答案 0 :(得分:2)
Base64编码与问题无关,因为您知道这是源编码。基本上你有一个字节流来编码为文本,而不知道目标编码或字符集。这意味着你的文字真的受到了损害;正如@deceze所评论的那样,最好的办法是确保编码为always known/available。
如果文本是XML,HTML或MIME,那么您可以通过两次传递:
charset
属性。否则,您需要一种启发式方法来检测编码。这不是100%可靠。请参阅以下链接:
编辑:XML / HTML可以编码为ASCII / UTF-8以外的其他内容;对于MIME也可能是这样。这意味着即使对于这些文件类型,也需要启发式方法,除非您知道编码只能是ASCII / UTF-8 / ISO-8859-1,其前128个字符相同。