我有一个SQL文件作为嵌入式资源添加到我的VS.NET 2008项目中.每当我使用以下代码读取文件的内容时,返回的字符串总是以三个垃圾字符开头,然后是我期望的文本.我认为这与我正在使用的Encoding.Default有关,但这只是猜测.为什么这个文字会一直显示出来?我应该只删除前三个字符还是有更明智的方法?
public string GetUpdateRestoreSchemaScript() { var type = GetType(); var a = Assembly.GetAssembly(type); var script = "UpdateRestoreSchema.sql"; var resourceName = String.Concat(type.Namespace, ".", script); using(Stream stream = a.GetManifestResourceStream(resourceName)) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); // UPDATE: Should be Encoding.UTF8 return Encoding.Default.GetString(buffer); } }
更新: 我现在知道,如果我只是更改最后一行以返回UTF-8编码的字符串,我的代码将按预期工作.这个嵌入式文件总是如此,但它总是如此吗?有没有办法测试任何缓冲区来确定其编码?
该文件可能是utf-8编码,而Encoding.Default是ASCII.你为什么不使用特定的编码?
编辑以回答评论:
为了猜测文件编码,您可以在流的开头查找BOM.如果它存在,它会有所帮助,如果没有,那么你只能猜测或询问用户.