2024년 3월 22일 금요일

개발자가 시선에서 4Byte 이모지(유니코드) 처리는 어떻게 해야할까요?

두개의 시스템 연계를 위한 인터페이스, EAI업무를 하다보면 사용자가 넣는 데이터인 이모지,유니코드 등 전송포맷에 안맞는 데이터로 인해 발생된 에러에 대해 확인 및 조치가 필요한경우가 존재함

이모지란

  • 이모지(Emoji)는 일본어로 그림문자를 의미
  • 어떤 감정이나 사물을 이미지로 나타낸거라고 하는데 이모티콘과는 다른것 같음
  • 일본에서 만들어졌다고 하며 첫 이모지는 1999년에 만들어졌다고 함
  • 일본의 휴대전화 제조사인 NTT DoCoMo에서 사용하기 위해 개발한 유니코드
  • Unicode Consortium(구글,애플 등 여러 IT기업들이 299년에 만든 단체)에서 새로운 이모지를 결정 공개
  • 영어보다 더 많은 나라에서 사용하고 있는 언어라고 함
  • 애플,구글,삼성 등 기기마다 다르게 보일수 있음

개발자가 바라본 이모지

  • 이모지는 유니코드로 표현 
  • 각 프로그램(기기)에서 유니코드에 대한 정의된 이미지를 보여줌 → 동일 유니코드이지만 서로 다른 그림문자 
  • 유니코드는 전세계 모든 문자를 프로그램에서 표현하는 산업표준
  • 여러 이모지가 합쳐서 결합(복합)이모지나 아니면 변형 이모지들이 존재
  • 이런 복합 이모지는 복잡한 유니코드 조합으로 만들어짐
  • 어떤 프로그램이나 서비스에서는 4Byte이미지에 대한 정책이 존재
    • 예를들어 인코딩 문제로 허용하지 않은 문자로 처리한다거나
    • 이런 이모지로 인한 이슈로 4byte이모지를 필터링하거나 처리하는 소스도 개발되는 경우도 있음
  • 이모지관리 https://home.unicode.org/

이모지 처리는 어떻게

  • 정규식을 통한 이모지 필터링,제거 방법은 상위버젼(새로운 이모지)이 나왔을때 수정 번거로움 
  • 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]", "")
  • 자바 이모지 관련 라이브러리를 사용

이전에 작성한 관련 글


출처

댓글 없음:

댓글 쓰기