app表情符保存到數據庫的問題

下述網址的表情包兼容了網頁、ios、apple等平臺,圖標的顯示在各平臺間可能有些差異,但基本上不須要本身單獨再去作一套圖標了。php

emoji表情符全表

http://apps.timwhitlock.info/emoji/tables/unicodejava

在php中使用網頁中的使用

<?php
$emoji = 'F09F9883';    //第三個表情符的utf-8形式:\xF0\x9F\x98\x83
echo hex2bin($emoji);
?>

在google chrom、safari、firefox瀏覽器能夠顯示正常的圖標。mysql

app裏的使用也相似,只要將utf8轉成對應的二進制字符再輸出便可正常解釋成一個圖標。ios

複製發到微信也能夠正常顯示。git

但微信使用的表情系統不是基於Unicode的,並且本身單獨開發的,傳統的使用佔位符方式,如[微笑],發送後再解釋成一個微笑的表情符,這種方案體驗不是很好。至於爲什麼微信選用此方案,多是爲了更好的兼容要求,畢竟開發的比較早,並且不一樣機型適配顯示的問題,另外加上安全的考慮(emoji是基於擴展Unicode字符集實現的),在後臺程序處理上要當心,不然常常會帶來沒必要要的問題,若是這些不是主要考慮的問題,使用emoji的unicode方案不失爲一種方便快速的實現。github

微信的暱稱是支持emoji的。sql

解決emoji寫入數據庫失敗的問題

  • base64編碼法。emoji是二進制的,因此在直接sql操做中可能會出錯,要先將內容轉成其餘格式再保存,如用base64。數據庫

  • 針對mysql5.5以上版本,還有一種解決方案是將字段轉爲utf8mb4(由於emoji是4個字符的),同時保證mysql鏈接使用的是utf8mb4,如 SET NAMES utf8mb4segmentfault

ALTER TABLE mytable charset=utf8mb4;
MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4;
SET NAMES utf8mb4

 

JAVA鏈接池方式要修改my.cnf全局配置纔會生效,同時修改鏈接串爲 瀏覽器

jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8 (注意characterEncoding沒有utf8mb4的參數,只能用utf-8)

若是仍有問題請檢查jdbc鏈接包jar的版本,通常要5.1以上纔對utf8mb4支持正常

vi /etc/my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

 

國內各公司完美支持emoji的估計還很少。

 

參考

http://www.javashuo.com/article/p-fhfqfxxz-z.html

http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/

https://fortawesome.github.io/Font-Awesome/icons/ 圖標字庫

https://fortawesome.github.io/Font-Awesome/cheatsheet/

相關文章
相關標籤/搜索