昨天听镇方分享店铺内的架构,提到一个有趣的问题, 由于中文都采用GBK编码,所以在搜索(使用strstr搜索子串)时会出现一些错误的匹配,高亮要在字符串中插入一些标记,这个时候会导致前端显示乱码。
“夏新”的GBk编码是”0xcf 0xc4 0xd0 0xc2″,”男”的GBK编码是”0xc4 0xd0″,刚好匹配上了中间两个字节,如果”夏新”后面还有汉字的话,这些字就要悲剧了。如果使用UTF-8编码就不会有问题了,因为中文使用UTF-8编码需要三个字节(1110xxxx 10xxxxxx 10xxxxxx),而第一个字节会是’E',后续两个字节都是10开始的,最大也就是’B',这样就不会有错误匹配的问题。
早期由于带宽和存储设备的限制,导致很多网站都用GBK编码,从此便踏上了不归路。Linux对UTF-8编码支持非常好,现在每天都要频繁去切换编码,在screen里面遇到乱码真是麻烦,窗口直接卡死,有时候过一段时间便能恢复,有时候只能将窗口kill掉。Hadoop对GBK编码支持也不好,写MR Job经常需要将编码先转成UTF-8,任务运行结束时,最后再转成GBK编码输出。