带Html标签的文本存储到数据库中自动多了一个?

  • 富文本编辑器用的Ueditor,上传视频后,保存到数据库中会多一个?号,如下

  • 问题原因是GB2312格式转换为Utf-8时,会解析不了空格,所以导致存储、读取都出现问题

解决如下:

  1. 数据库字段类型改为nvarchar类型
  2. 存储时,在字段前加N,代码如下
DBHelper help = new DBHelper(ConfigurationManager.ConnectionStrings["UBISurvey"].ConnectionString);
string sql = "update [xxx].[dbo].[T_System] set C_Title=N'" + Title + "',C_Description=N'" + Body + "'   where N_SysId=" + VoteID;

 

另一种解决方案如下:

在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台会显示为“?”号,只是显示为问号而不是真正的问号,所以无法被替换!

int uid = dal.UpdateVoteDesc(sSysID, sTitle, Validator.LanChangeUTF8(sDesctiption))

 

   #region GB2312转化为UTF-8
        /// <summary>
        /// GB2312转化为UTF-8
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string LanChangeUTF8(string str)
        {
            string currentStr = string.Empty;
            byte[] utf8Space = new byte[] { 0xc2, 0xa0 };
            string tempSpace = Encoding.GetEncoding("UTF-8").GetString(utf8Space);
            currentStr = str.Replace(tempSpace, " ");
            return currentStr;
        }
        #endregion

        #region UTF-8转化为GB2312
        /// <summary>
        /// UTF-8转化为GB2312
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string LanChangeGB2312(string text)
        {
            byte[] bs = Encoding.GetEncoding("UTF-8").GetBytes(text);
            bs = Encoding.Convert(Encoding.GetEncoding("UTF-8"), Encoding.GetEncoding("GB2312"), bs);
            return Encoding.GetEncoding("GB2312").GetString(bs);
        }
        #endregion

非常感谢这些提供解决方案的大牛

参考资料:http://www.cnblogs.com/hellolong/p/5785178.html

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值