back/java
emoji 처리
펭귄대장
2019. 4. 26. 17:03
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 |
반응형