was中奇怪的生僻字乱码案例

问题描述

这个今天早上提供的一个生产问题。大体是说,改资料的时候,有个客户的名字有生僻字,叫”刘”,保存之后就乱码了,变成”刘?”

分析过程

乱码需要确认数据传输过程中编码方式。

  1. 数据是通过jQuery的ajax过来的,并且没有提前处理数据(只有组装了一个js对象),所以是采用encodeURIComponent进行处理的,对于中文可以很粗糙的理解成UTF-8编码过。这一点通过抓包工具是可以确认的。
  2. 到了服务端之后会通过getParameter获取参数,由于带charsetEncoding的过滤器,并且是采用UTF-8的,那么这里拿到的字符串应该也是不会乱码的。

到了这里,代码并没有特别之处。按我的理解,只要字符集能够支持这个生僻字,就不会出现乱码。
难道保存到数据库的时候乱码了? 目前数据库是用GBK的,我去查了一下GBK的字符表,的确是有这么个字的。

我在本机上测了一下这个字的各种功能编码转换,都是正常的。
难道又是IBM的坑? 后来我又在服务器上测试了各种情况的输出,发现有另外一个字”䶮”,除了字体大小有点不一样之外,几乎一模一样的。

下面整理了一个简单的测试程序,来说明这个奇怪的问题。

测试结果

首先要说明的是,这里有2个字,一小一大,还有它们对应的unicode和utf-8编码。
测试结果是采用secureCRT的GB18030编码显示。

有两个字:       小        大
unicode        \uE863    \u4dae
浏览器(utf-8)   %EE%A1%A3  %E4%B6%AE

下面的测试代码,为了编译时不关心字符集,所以换成utf-8字节来生成字符串。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值