菜鸟求解决方法,sqlsever存储emoji表情

sige100 2016-09-27 09:58:22
首先调用ajax提交信息,其中就包括了emoji表情

$.ajax({
type: 'post',
url: XXXXXX", //这是提交地址
async: false,
cache: false,
data: {
...
, 'message': encodeURIComponent($('#message').val()) //这就是输入emoji的文本框
},
dataType: 'text',

success: function (data) {
... //提交完之后的业务
}


在相应control类中接受提交的数据并调用方法,用linq写入数据库

Topic.Add(new dataLayer.db.t_topic()
{
...
f_message = System.Web.HttpUtility.UrlDecode(model.message),
...
});


提交后,从数据库读出写入的内容,毫无悬念,emoji变成了乱码,于是我换了提交页面的页面编码

<meta charset="unicode">


还是不行,我又在ajax提交的时候强制把提交内容转换编码


$.ajax({
type: 'post',
url: XXXXXX", //这是提交地址
async: false,
cache: false,
data: {
...
, 'message': encodeURIComponent($('#message').val()) //这就是输入emoji的文本框
},
dataType: "application/x-www-form-urlencoded; charset=unicode",

success: function (data) {
... //提交完之后的业务
}

保存下来一样是乱码,我用gb2312替代了上面的unicode,结果一样

调试发现,在存入数据库之前,用System.Web.HttpUtility.UrlDecode解码出来就已经是乱码了。


因为任务急,我只能用一个抱佛脚的方法,就是在ajax编码之后,并不解码,而是直接把url编码后的内容存入数据库(emoji编码后是一串带“%”的字符串)

Topic.Add(new dataLayer.db.t_topic()
{
...
f_message =model.message,
...
});


等从数据库读出来的时候再解码,这个方法暂时来说还管用,但是我觉得一定还有更好的方法。因为我曾经在网上搜过关于emoji存sqlsever的问题,发现找不到关于该问题的内容,这说明根本就没有人为这个问题头疼过,那就意味着一定有更正规,更简便,更没有后遗症的解决方法,而我一定是绕进了一条弯路

另外,关于为什么要用.net来做这个手机页面,其实这本来是一个pc页面,已经很完善了,突然需求一变,于是……
...全文
755 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sige100 2016-10-12
  • 打赏
  • 举报
回复
引用 2 楼 99guo 的回复:
这是sql存储unicode的编码问题。 解决方法:在写插入的sql语句的值前加N标识是以unicode存储。同时字段的类型改为nvarchar的类型保存。 如 :insert into db1 (name) values (N'ssss')
太感谢了,测试下来确实管用,然而因为我的项目用的是linq,所以正在研究如何用lambda语句来表达N标识,不过这事另一个问题了,我先把这个帖子结掉(奇怪的是,我网上搜了相关问题,别人都说只要把数据库字符串改成nvarchar就行,但是我改了还是显示不出来,真奇怪)
  • 打赏
  • 举报
回复
有什么意义呢? --> 有什么理由呢? 我完全看不出来你有什么理由啊。难道是“无厘头、妄想即信”?
  • 打赏
  • 举报
回复
为什么要 encodeURIComponent?有什么意义呢?
99guo 2016-10-06
  • 打赏
  • 举报
回复
很久没来CSDN逛逛。今天解答加打酱油。
99guo 2016-10-06
  • 打赏
  • 举报
回复
这是sql存储unicode的编码问题。 解决方法:在写插入的sql语句的值前加N标识是以unicode存储。同时字段的类型改为nvarchar的类型保存。 如 :insert into db1 (name) values (N'ssss')
闭包客 2016-09-27
  • 打赏
  • 举报
回复
与页面编码无关,不用再思考这个方向。 既然你从数据库读取后能解码,读取请求的时候也能解码,方法是一样的。

62,054

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧