두개의 시스템 연계를 위한 인터페이스, EAI업무를 하다보면 사용자가 넣는 데이터인 이모지,유니코드 등 전송포맷에 안맞는 데이터로 인해 발생된 에러에 대해 확인 및 조치가 필요한경우가 존재함
이모지란
- 이모지(Emoji)는 일본어로 그림문자를 의미
- 어떤 감정이나 사물을 이미지로 나타낸거라고 하는데 이모티콘과는 다른것 같음
- 일본에서 만들어졌다고 하며 첫 이모지는 1999년에 만들어졌다고 함
- 일본의 휴대전화 제조사인 NTT DoCoMo에서 사용하기 위해 개발한 유니코드
- Unicode Consortium(구글,애플 등 여러 IT기업들이 299년에 만든 단체)에서 새로운 이모지를 결정 공개
- 영어보다 더 많은 나라에서 사용하고 있는 언어라고 함
- 애플,구글,삼성 등 기기마다 다르게 보일수 있음
개발자가 바라본 이모지
- 이모지는 유니코드로 표현
- 각 프로그램(기기)에서 유니코드에 대한 정의된 이미지를 보여줌 → 동일 유니코드이지만 서로 다른 그림문자
- 유니코드는 전세계 모든 문자를 프로그램에서 표현하는 산업표준
- 여러 이모지가 합쳐서 결합(복합)이모지나 아니면 변형 이모지들이 존재
- 이런 복합 이모지는 복잡한 유니코드 조합으로 만들어짐
- 어떤 프로그램이나 서비스에서는 4Byte이미지에 대한 정책이 존재
- 예를들어 인코딩 문제로 허용하지 않은 문자로 처리한다거나
- 이런 이모지로 인한 이슈로 4byte이모지를 필터링하거나 처리하는 소스도 개발되는 경우도 있음
- 이모지관리 https://home.unicode.org/
- 이모지차트 https://unicode.org/emoji/charts/emoji-counts.html
- 이모지 심사후 배포 이력 https://unicode.org/Public/
이모지 처리는 어떻게
- 정규식을 통한 이모지 필터링,제거 방법은 상위버젼(새로운 이모지)이 나왔을때 수정 번거로움
- MySQL에서의 이모지 처리는 인코딩을 utf8mb4로 설정
- 정규식(Reqular expression)을 사용한 대체 데이터로 처리(유니코드 범위)
- 유니코드 블랙리스트 작성하여 제거하는 방법
- 유니코드 범위 밖에 추가된 이모지는 놓치게 되고 항상 최신상태를 유지해야하는 번거로움이 존재
replaceAll("[\x{1F004]-\x{1F9E6}]|[\x{1F600}-\x{1F9D0}]","")
- 이모지 확인은 https://www.w3schools.com/charsets/ref_emoji_smileys.asp
- regex를 사용한 화이트 리스트 이모지 제거
- 블랙리스트보다 선호하는 방법이라고 함
.replaceAll("[^\\p{L}\\p{M}\\p{N}\\p{P}\\p{Z}\\p{CF}\\p{Cs}\\s]", "")
- 자바 이모지 관련 라이브러리를 사용
댓글 없음:
댓글 쓰기