UTF-8和UTF-8 BOM

原文链接: http://www.cnblogs.com/zhanghonjiang2011/archive/2012/06/20/2556374.html

起因:

做项目的时候,需要根据条件数据生成静态的Html,下面是生成静态的Html

 /// <summary>
        /// 生成静态Html
        /// </summary>
        /// <param name="strHtml">html</param>
        /// <param name="path">网页保存路径</param>
        /// <param name="pageName">网页名称</param>
        /// <param name="success">生成状态</param>
        private void GenerateHtml(string strHtml,string path,string pageName,out bool success)
        {
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;   //项目根目录
            try
            {
                FileStream fs = new FileStream((baseDirectory + "/" + path + "/" + pageName), FileMode.Create);
                StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("UTF_8"));    //输出的网页编码格式为UTF-8 BOM
                sw.Write(strHtml);   //写入Html
                sw.Close();          //关闭流
                fs.Close();
                success = true;
            }
            catch(IOException ex)
            {
                success = false;
            }
        }

生成的Html在单文件使用的情况下没有问题,但是通过【文件引入】就会出现乱码的情况

会出现【&#65279】这样的乱码,会在页面中多出一处空白行,从而影响到页面的布局。

在网上找了很多的资料得到的信息如下:

1、Visual Studio 默认生成文件的编码格式为UTF-8 BOM 【byte order mark】也就是字节序标记

 显然,现在要解决的问题是UTF-8和UTF-8 BOM编码之间的转换

以下是不提供BOM的编码

Encoding utf8NoBom = new UTF8Encoding(false);
Encoding utf16NoBom = new UnicodeEncoding(false, false);
Encoding utf32NoBom = new UTF32Encoding(false, false);

所以把上面的编码格式做下修改,生成的静态页面的编码格式就是UTF-8

 /// <summary>
        /// 生成静态Html
        /// </summary>
        /// <param name="strHtml">html</param>
        /// <param name="path">网页保存路径</param>
        /// <param name="pageName">网页名称</param>
        /// <param name="success">生成状态</param>
        private void GenerateHtml(string strHtml,string path,string pageName,out bool success)
        {
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;   //项目根目录
            try
            {
                FileStream fs = new FileStream((baseDirectory + "/" + path + "/" + pageName), FileMode.Create);
                Encoding utf8NoBom = new UTF8Encoding(false); //参数是否提供一个Unicode字节顺序标记
                StreamWriter sw = new StreamWriter(fs, utf8NoBom);    //输出的网页编码格式为UTF-8 BOM
                sw.Write(strHtml);   //写入Html
                sw.Close();          //关闭流
                fs.Close();
                success = true;
            }
            catch(IOException ex)
            {
                success = false;
            }
        }

现在生成的静态页面就是UTF-8的编码格式了。

扫描二维码关注公众号,回复: 6770613 查看本文章

转载于:https://www.cnblogs.com/zhanghonjiang2011/archive/2012/06/20/2556374.html

猜你喜欢

转载自blog.csdn.net/weixin_30666753/article/details/94800042