- 富文本编辑器用的Ueditor,上传视频后,保存到数据库中会多一个?号,如下
- 问题原因是GB2312格式转换为Utf-8时,会解析不了空格,所以导致存储、读取都出现问题
解决如下:
- 数据库字段类型改为nvarchar类型
- 存储时,在字段前加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