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 |
반응형
'back > java' 카테고리의 다른 글
깊은복사(Deep Copy)와 얕은복사(Shallow Copy) (3) | 2019.08.31 |
---|---|
LocalHost IP 가져오기 (0) | 2019.05.28 |
자바 컴파일 버전 Exception (Unsupported major.minor version 52.0) (0) | 2019.05.20 |
HttpUrlConnection을 이용한 외부서버 통신(retry) (3) | 2019.01.18 |
HttpMethod DELETE 방식 호출(HttpURLConnection) 및 주의사항 (0) | 2019.01.14 |