手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2012年10月9日的文章

转:Emoji表情符号兼容方案

Emoji,原来的项目中没有遇到,因为从未想过别人会从网页里发送表情(表情 信息是从iphone手机上发出来的),查了一下资料,果然很多人遇到了这个问题。不过也幸好有了解决方案了。。。

Emoji表情符号兼容方案

一 什么是Emoji   

      emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)
表情符号现已普遍应用于手机短信和网络聊天软件。
emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。
手机上如何使用emoji:
1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。
IOS 5用户可直接从通用中添加emoji 键盘,无需再安装emoji free
2.android系统:安装“GO输入法国际版”后,在输入法里面点选安装emoji插件可以使用。另外“百度输入法”也自带emoji表情
3.Windows Phone : 安装此 Emoji Keys,在其中输入之后复制粘贴到需要输入表情的地方即可

    <此段摘自百度百科 http://baike.baidu.com/view/2631589.htm>

大小: 568.34 K
尺寸: 494 x 376
浏览: 1478 次
点击打开新窗口浏览全图

二 Emoji表情符号问题
   1 问题:
     IOS版本之间发送的Emoji表情符号不兼容,只看到方块
     不同IOS版本在数据库存数据时,有时会发生系统错误
   2 现象:
     IOS 4 输入Emoji表情符,在IOS5.01 显示正常,在IOS5.1中(大陆版)显现为方块, 但IOS5.01/5.1输入的表情符号,显示正      常
     IOS5.01/5.1 输入表情符,在IOS5.01/5.1中显示正常,但在IOS4.X显示为方块
     输入Emoji入帖子正文, 可正常存储。 但用户昵称在IOS4.X 输入Emoji,系统正常, 而IOS5.01/5.1则提示系统错误。
   3 本质:
     iOS 5 and OS X 10.7 (Lion) use the Unicode 6.0 standard ‘unified’ code points for emoji.
     iOS 5 Emoji  采用Unicode 6 标准来统一code points 

     iOS 4 on SoftBank iPhones used a set of unofficial code points in the Unicode Private Use Area, and so aren't      compatible with any other systems
     iOS 4 采用SoftBank Unicode, 一种非官方的, 采用私有Unicode 区域。
   4 举例:
     one emoji symbol "tiger", it is "\U0001f42f" in iOS5, but "\ue050" in earlier iOS version
    虎脸Emoji符号在iOS5 为Unicode:\U0001f42f;而在IOS4.x 为:\ue050 (SoftBank 编码)
    另外: 按理讲, 从iOS5 应该兼容以前版本的emoji, 但现在出现5.01版本完美兼容(无论大陆版,美版,还是港版), 而5.1     大陆版出现了不兼容现象(腾讯微信也出现了同样的问题)。
三 问题分析
   1 系统存储错误问题(如昵称,帖子内容)
    原因:
    由于IOS5.X 采用新的Unicode, 其UTF8 编码大多为4个字节, 而由于昵称/帖子内容column并没设成utf8mb4,因此存储会    发生错误。
    解决方法:
    将昵称/帖子内容设成utf8mb4
   2 不同iOS 之间Emoji 不兼容的问题。 
   原因:
   iOS 5 到4 不兼容的问题,很简单,unicode6 和softbank编码的不同
   iOS 4 到 5,按理说应该兼容,也就是说,iOS应该自动判断如果是softbank编码,自动转成unicode6。但现在看来, iOS5.1(大陆版)好像只支持unicode6, 而不支持softbank. 
   解决方法: 
   客户端发送emoji-encoding: Softbank或unicode6, 由服务端分别给出相应的编码表。
四 解决方案
   1 数据存储(MySQL varchar  数据类型对UTF8 支持问题)
    MYSQL 5.5 之前, UTF8 编码只支持1-3个字节, 从MYSQL5.5开始,可支持4个字节UTF编码,但要特殊标记。例如我们的帖子内容项,我们加上了这个支持。服务端mysql统一存储为ios5.x也就是Unicode编码。
   对应alter语句:

XML/HTML代码
  1. ALTER TABLE topic MODIFY COLUMN content varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内容';  

    2 编码转换:
    iphone手机方案
    客户端输入内容时候,统一存储为unicode编码(这里需要从softbank编码转换为unicode编码)。客户端请求内容的时候,需要根据不同的客户端给出不同的编码,ios4采用softbank编码做替换,ios5采用unicode编码直接支持。
    android或wp其他手机方案:
    如果没有emoji表情库,将无法输入。针对输入问题,将统一采用unicode编码存储。客户端请求内容的时候,将统一用softbank编码,客户端需要把emoji表情符号内置到客户端,做对应的编码和img替换。
    web解决方案:
    参考android或wp其他手机方案
五 部分代码
   1 sql代码

XML/HTML代码
  1. CREATE TABLE `ios_emoji` (  
  2.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',  
  3.   `unicode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Unicode编码',  
  4.   `utf8` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'UTF8编码',  
  5.   `utf16` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'UTF16编码',  
  6.   `sbunicode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SBUnicode编码',  
  7.   `filename` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名',  
  8.   `filebyte` longblob COMMENT '文件内容字节',  
  9.   PRIMARY KEY (`id`)  
  10. ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='ios表情编码表';  

   2 java代码

Java代码
  1. import java.io.UnsupportedEncodingException;  
  2. import org.apache.commons.lang.StringUtils;  
  3.   
  4.   
  5. public class IOSEmojiUtil {  
  6.       
  7.     public static String[] ios5emoji ;  
  8.     public static String[] ios4emoji ;  
  9.     public static String[] androidnullemoji ;  
  10.     public static String[] adsbuniemoji;  
  11.       
  12.     public static void initios5emoji(String[] i5emj,String[] i4emj,String[] adnullemoji,String[] adsbemoji){  
  13.         ios5emoji = i5emj;  
  14.         ios4emoji = i4emj;  
  15.         androidnullemoji = adnullemoji;  
  16.         adsbuniemoji = adsbemoji;  
  17.     }  
  18.       
  19.     //在ios上将ios5转换为ios4编码  
  20.     public static String transToIOS4emoji(String src) {  
  21.         return StringUtils.replaceEach(src, ios5emoji, ios4emoji);  
  22.     }  
  23.     //在ios上将ios4转换为ios5编码  
  24.     public static String transToIOS5emoji(String src) {  
  25.         return StringUtils.replaceEach(src, ios4emoji, ios5emoji);  
  26.     }  
  27.     //在android上将ios5的表情符替换为空  
  28.     public static String transToAndroidemojiNull(String src) {  
  29.         return StringUtils.replaceEach(src, ios5emoji, androidnullemoji);  
  30.     }  
  31.       
  32.     //在android上将ios5的表情符替换为SBUNICODE  
  33.     public static String transToAndroidemojiSB(String src) {  
  34.         return StringUtils.replaceEach(src, ios5emoji, adsbuniemoji);  
  35.     }  
  36.       
  37.     //在android上将SBUNICODE的表情符替换为ios5  
  38.     public static String transSBToIOS5emoji(String src) {  
  39.         return StringUtils.replaceEach(src, adsbuniemoji, ios5emoji);  
  40.     }  
  41.       
  42.     //eg. param: 0xF0 0x9F 0x8F 0x80  
  43.     public static String hexstr2String(String hexstr) throws UnsupportedEncodingException{  
  44.         byte[] b = hexstr2bytes(hexstr);  
  45.         return new String(b, "UTF-8");  
  46.     }  
  47.       
  48.     //eg. param: E018  
  49.     public static String sbunicode2utfString(String sbhexstr) throws UnsupportedEncodingException{  
  50.         byte[] b = sbunicode2utfbytes(sbhexstr);  
  51.         return new String(b, "UTF-8");  
  52.     }  
  53.       
  54.     //eg. param: 0xF0 0x9F 0x8F 0x80  
  55.     public static byte[] hexstr2bytes(String hexstr){  
  56.         String[] hexstrs = hexstr.split(" ");  
  57.         byte[] b = new byte[hexstrs.length];  
  58.           
  59.         for(int i=0;i<hexstrs.length;i++){  
  60.             b[i] = hexStringToByte(hexstrs[i].substring(2))[0];  
  61.         }  
  62.         return b;  
  63.     }  
  64.       
  65.     //eg. param: E018  
  66.     public static byte[] sbunicode2utfbytes(String sbhexstr) throws UnsupportedEncodingException{  
  67.         int inthex = Integer.parseInt(sbhexstr, 16);  
  68.         char[] schar = {(char)inthex};  
  69.         byte[] b = (new String(schar)).getBytes("UTF-8");  
  70.         return b;  
  71.     }  
  72.       
  73.     public static byte[] hexStringToByte(String hex) {  
  74.         int len = (hex.length() / 2);  
  75.         byte[] result = new byte[len];  
  76.         char[] achar = hex.toCharArray();  
  77.         for (int i = 0; i < len; i++) {  
  78.             int pos = i * 2;  
  79.             result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));  
  80.         }  
  81.         return result;  
  82.     }  
  83.   
  84.   
  85.     private static byte toByte(char c) {  
  86.         byte b = (byte"0123456789ABCDEF".indexOf(c);  
  87.         return b;  
  88.     }  
  89.       
  90.     public static void main(String[] args) throws UnsupportedEncodingException {  
  91.         // TODO Auto-generated method stub  
  92.         byte[] b1 = {-30,-102,-67}; //ios5 //0xE2 0x9A 0xBD       
  93.         byte[] b2 = {-18,-128,-104}; //ios4 //"E018"  
  94.           
  95.         //-------------------------------------  
  96.           
  97.         byte[] b3 = {-16,-97,-113,-128};    //0xF0 0x9F 0x8F 0x80         
  98.         byte[] b4 = {-18,-112,-86};         //E42A    
  99.           
  100.           
  101.         ios5emoji = new String[]{new String(b1,"utf-8"),new String(b3,"utf-8")};  
  102.         ios4emoji = new String[]{new String(b2,"utf-8"),new String(b4,"utf-8")};      
  103.           
  104.           
  105.         //测试字符串  
  106.         byte[] testbytes = {105,111,115,-30,-102,-67,32,36,-18,-128,-104,32,36,-16,-97,-113,-128,32,36,-18,-112,-86};  
  107.         String tmpstr = new String(testbytes,"utf-8");  
  108.         System.out.println(tmpstr);  
  109.           
  110.           
  111.         //转成ios4的表情  
  112.         String ios4str = transToIOS5emoji(tmpstr);  
  113.         byte[] tmp = ios4str.getBytes();  
  114.         //System.out.print(new String(tmp,"utf-8"));          
  115.         for(byte b:tmp){  
  116.             System.out.print(b);  
  117.             System.out.print(" ");  
  118.         }  
  119.     }  
  120.       
  121. }  

 

六 参考资料
1 Emoji 全编码表:(我参考的这个)
  http://punchdrunker.github.com/iOSEmoji/table_html/flower.html
2 Emoji全编码表
  http://code.iamcal.com/php/emoji/

3 iOS5/4 Emoji  兼容性:
  http://stackoverflow.com/questions/7856775/how-to-convert-the-old-emoji-encoding-to-the-latest-encoding-in-ios5
4 MySQL emoji问题
  http://dropblood.com/archives/ios-mysql-emoji
5 Emoji 中文对应表
  http://www.iapps.im/wp-content/uploads/2012/02/emoji-pinyin.png?r=010

七 下载资源 

emoji图片和编码表 http://download.csdn.net/detail/qdkfriend/4309051

  包括emoji文件表,emoji数据编码表(Unicode编码,UTF8编码,UTF16编码,SBUnicode编码)

[转]公安部:明年起司机闯红灯一律扣6分

这个转一下做个记录。。

核心提示:10月8日,公安部发布新修订的《机动车驾驶证申领和使用规定》规定,2013年起司机闯红灯一律扣6分。醉驾大中型客货车将终身禁驾,对3年以下驾龄的驾驶人发生交通死亡事故的,倒查考试发证民警的责任。

严管大中型客货车司机,吸毒驾车“零容忍”,“新手”撞死人倒查考试发证民警的责任,不按规定避让校车记6分……昨天公安部修订并发布的《机动车驾 驶证申领和使用规定》(公安部令第123号,以下简称123号令)中,明显加强了对大中型客货车司机的管理,并提高了涉及校车等交通违法行为的处罚力度。

123号令中,关于校车驾驶人管理的内容自发布之日起施行。其他规定将于2013年1月1日起正式施行。

醉驾大中型客货车终身禁驾

近年来,大中型客货车驾驶人肇事率较高。据统计,2009年至2011年,每年一次死亡10人以上的重特大道路交通事故中,大中型客货车驾驶人肇事导致事故起数和死亡人数均占70%以上。

为 严格限制有严重危险驾驶行为的驾驶人申请大中型客货车驾驶证,123号令规定:造成死亡交通事故负同等以上责任、醉酒驾驶记录的终身不得申请;被处以吊销 或者撤销驾驶证记录的10年内不得申请;记满12分的5年内不得申请大型客车驾驶证、3年内不得申请牵引车、中型客车驾驶证。

此外,针对近 年来暴露出的吸毒后驾驶机动车问题,新令中对吸毒人员申请驾驶证或者驾驶机动车采取“零容忍”措施,规定:3年内有吸食、注射毒品行为或者解除强制隔离戒 毒措施未满3年的,不得申请驾驶证;驾驶人吸食、注射毒品后驾驶机动车或者正在执行社区戒毒、强制隔离戒毒、社区康复措施的,要注销驾驶证。

新手肇事倒查发证民警责任

123 号令中规定,将科目一理论考试拆分为两部分,第一部分主要考核道路交通安全法律法规、交通信号、通行规则等知识,仍作为科目一。第二部分作为安全文明驾驶 考试项目,在实际道路考试后进行,考核安全文明驾驶要求、复杂条件下的安全驾驶知识等,加深驾驶人对安全文明驾驶常识的理解记忆。

此外,对 申领大中型客货车驾驶证的,在科目二场地驾驶技能考试中,增加模拟高速公路、雨雾天、湿滑路、紧急情况处置等考试项目,提高了考试针对性和考试难度。调整 后的大中型客货车科目二考试由原来的“训练10项、考试6项”修改为“训练、考试均为16项”。同时在科目三的实际道路驾驶技能考试中,增加山区、隧道、 陡坡等复杂道路考试,并明确大中型客车考试里程不少于20公里、牵引车和大型货车不少于10公里。

为强调实用性,123号令取消了小型汽车桩考两个桩位之间的移库、通过连续障碍、单边桥等现实生活中应用性不强的考试项目。调整后,小型汽车场地考试项目由原来的“训练10项、考试4项”改为“训练和考试均为5项”,即倒车入库、坡道定点停车与起步、侧方停车、曲线行驶和直角转弯。此外,场地考试中用标线替换现有的标杆,更加贴近实际道路场景。

新规中同时还明确了发证民警的责任。建立了考试培训质量公告制度和违规考试发证责任追究制度,设置考试工作纪律“高压线”,明确民警违规考试发证的法律责任,并规定对3年以下驾龄的驾驶人发生交通死亡事故的,倒查考试发证民警的责任。

新手上高速必须由老手陪同

据统计,我国驾驶人以平均每年2000多万人的速度快速增长,1年以下驾龄的实习期驾驶人肇事比率较高,大中型客货车驾驶人交通违法较为突出。

针 对这一现象,123号令中规定,除第一次领取驾驶证的人以外,增驾新取得大型客车、中型客车、牵引车等驾驶证的驾驶人一并纳入实习期管理。特别是大中型客 货车驾驶人,实习期结束后要参加安全文明驾驶等知识考试,接受交通事故案例警示教育;在实习期内违法记6分以上的,实习期限延长一年,再次记6分以上的, 取消其实习车型的驾驶资格。同时,还规定实习期内有记满12分记录的,要予以注销实习车型的驾驶资格。考虑到高速公路道路情况的特殊性,实习期驾驶人驾车 上高速公路时,必须由持相应或者更高车型驾驶证3年以上的驾驶人陪同。

在驾驶证审验方面,规定大中型客货车驾驶人每年参加审验,但没有记分 的可以免于审验。同时,规定持有其他准驾车型驾驶证且发生交通死亡事故承担同等以上责任的,也要参加当年的审验。此外,加强了审验时的学习教育,规定除审 验交通违法、事故处理,违法记分和满分学习、申报身体条件情况以外,还要参加不少于3小时的法律法规、交通安全文明驾驶等知识学习,并接受交通事故案例警 示教育。

对发生死亡交通事故负同等以上责任、有记满12分记录或者连续3年不审验的,注销最高准驾车型驾驶资格,逐级降低其驾驶资格,最终只保留其小型汽车驾驶资格,加强对驾驶人的管理。

故意遮挡污损号牌记12分

123号令对校车、大中型客货车、危险品运输车等重点车型驾驶人的严重交通违法行为提高了记分分值,记分项由38项增加至52项。

其 中新增的内容有:使用伪造和变造校车标牌、校车超员20%以上记12分、不按规定避让校车记6分等14个涉及校车管理的记分项;中型以上客货车、危险品运 输车在高速公路、城市快速路行驶超速20%以上,或者在其他道路行驶超速50%以上,驾驶营运客车、校车超员20%以上、未取得校车驾驶资格驾驶校车的等 行为记12分,以及疲劳驾驶载客汽车、危险品运输车记12分等记分项。

提高处罚力度的有:将未悬挂或者不按规定安装号牌、故意遮挡污损号牌等违法行为记分由6分提高到12分,将违反道路交通信号灯通行等违法记分由3分提高到6分。

同时,考虑到《道路交通安全法》已规定醉酒驾驶机动车的、吊销机动车驾驶证且5年内不得重新取得驾驶证,取消了原醉酒驾驶机动车违法行为记分。晨报记者 何欣

交管部门新增六项便民服务措施

将驾驶证补换领、审验和小型汽车驾驶证考试等业务向县级车辆管理所下放,方便县乡、农村群众在家门口申领、换领汽车驾驶证,缩短群众办事距离,减少群众往返时间。

将核发和补换领驾驶证的时限由3日缩短为1日。群众在驾驶证遗失或损坏后,在申请办理补换证的当日即可领取新的驾驶证,方便群众驾车出行。同时,对于申领驾驶证的群众,在三个科目考试合格和宣誓仪式后,当日就可领取驾驶证。

将申领大型货车驾驶证的年龄条件由21岁放宽至20岁。

考虑到一些群众由于平时学习工作较忙,不能在2年内完成培训和考试,将驾驶准考证明有效期由2年延长至3年,方便群众通过法规知识考试后,有更充裕的时间参加驾驶技能培训学习,参加考试。

推行互联网、电话等远程自助预约驾驶人考试服务,公开考试预约计划、预约人数和考试人数,方便群众根据自己的学习、工作和生活需要,合理选择时间参加考试。

规定异地从事营运的驾驶人和货车,在备案登记一年后,可以直接在营运地参加驾驶证审验或车辆年检,避免群众多次往返办理业务。

相关新闻

校车驾驶人建立退出机制

记 者昨天从公安部获悉,为贯彻落实国务院《校车安全管理条例》,公安部发布了《关于修改〈机动车登记规定〉决定》(公安部令第124号,以下简称124号 令)和《机动车驾驶证申领和使用规定》(公安部令第123号,以下简称123号令),明确了公安机关交通管理部门参与校车许可条件审查,发放校车标牌和校 车驾驶人资格许可的业务程序和要求。124号令和123号令中关于校车驾驶人管理的内容自发布之日起施行。

 

规定明确了参与校车使用许可审查工作职责和事项,规范了校车标牌核发条件和程序。同时,严格校车登记检验和报废制度。规定校车在办理注 册登记前必须进行安全技术检验,并按照《校车安全管理条例》每半年参加一次安全技术检验,保证校车安全技术性能。校车标牌有效期与安全技术检验有效期一 致,均为半年。规定达到报废标准的校车必须在车辆管理所的监督下解体,杜绝报废校车流向社会、继续上路行驶。

加强校车使用的日常监管。规定公安交通管理部门要每月清理校车交通违法和事故情况,督促及时接受处理,同时要每月向本级政府、教育行政部门通报校车标牌发放情况和校车交通违法、事故等情况。

严格校车驾驶人资格许可和管理制度。明确了申请校车驾驶资格应具备的条件,以及办理许可的手续和程序,建立了校车驾驶人每年审验、联合监管以及退出机制。