emoji 처리

모바일 앱이 전달하는 채팅내용에 emoji 가 포함되어 API 서버에서 Mysql DB에 해당 채팅내용을 로그성으로 기록하기 위해 insert를 하다 DB에러가 났다.

Exception은 아래와 같이 Incorrect string value ~ 발생.

Warning: #1366 Incorrect string value: '\xF0\x9F\x8D\xB0' for column 'Text' at row ~

 

* emoji 는 모바일(android, ios)에서 사용되는 이모티콘 같이 생긴 문자열로

3byte 문자열인 utf8과 달리 4byte 문자열인 utf8mb4 charset 을 사용한다.

 

 

해결방법 1. 

DB 칼럼의 datatype을 utf8mb4로 수정을 하여 해결

 

해결방법 2.

2-1) emoji 를 정규식으로 거른다 :

android, ios os 버전업이 될 때마다 emoji가 추가되는 듯 하니, 오래 운영될 서비스라면 적합하지 않은 방법인 듯.

2-2) 문자를 제외한 모든 데이터를 정규식으로 거른다 :

허용해줄 모든 문자들을 신중히 남겨놓아야 하기 때문에 번거롭겠지만, 로그성 데이터라면 대충 걸러도 되니 해당 방법을 선택..

1
2
3
4
5
6
public static String replaceEmoji(String text){
 
    String newText = text.replaceAll("[^a-zA-Z0-9ㄱ-힣\\s!@#$%^&|:<>~/';\"`.\\?\\}\\{\\|\\*\\[\\]\\(\\)-_/]""▩");
        
   return newText;
}
cs

 

 

 

반응형

+ Recent posts