当前位置:  开发笔记 > 编程语言 > 正文

为什么Assembly.GetManifestResourceStream()中的文本以三个垃圾字符开头?

如何解决《为什么Assembly.GetManifestResourceStream()中的文本以三个垃圾字符开头?》经验,为你挑选了1个好方法。

我有一个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编码的字符串,我的代码将按预期工作.这个嵌入式文件总是如此,但它总是如此吗?有没有办法测试任何缓冲区来确定其编码?



1> Alex Reitbor..:

该文件可能是utf-8编码,而Encoding.Default是ASCII.你为什么不使用特定的编码?

编辑以回答评论:

为了猜测文件编码,您可以在流的开头查找BOM.如果它存在,它会有所帮助,如果没有,那么你只能猜测或询问用户.


不同编辑器中的默认编码不一样.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有