Today I Learned
날짜
2024년 11월 8일 금요일
내용
이모지
인스타그램 댓글엔 이모지를 참 많이 쓴다. 그저께 TIL에도 썼듯이, 하트는 어떻게 해결했는데 여전히 몇가지 이모지가 텍스트로 나와 상당히 거슬린다.
이렇게 나온다.. 어떻게 할까 하다가 GPT가 기가 막힌 아이디어를 제공해줬다. 저 이모지를 태그로 씌운후 클래스를 설정해서, 그 클래스에만 폰트를 적용하는 거다. 🤣 를
<span class="emoji" style="padding:0;">🤣</span>
이런식으로 감싼 후, HTML 스타일에
1
2
3
.emoji {
font-family: 'Noto Color Emoji', 'Apple Color Emoji', sans-serif;
}
를 추가해줬다. 이제 관건은, 어떻게 이모지를 감지할 거냐는 건데.. 인스타그램에서 자주 쓰이는 이모지 10개만 처리할까 하다가 파이썬에 이모지 라이브러리가 있다는 게 기억났다. 이모지 라이브러리를 이용해 감지해서 태그를 감싸되, 이모지를 HTML 엔티티로 변경하고 Markup으로 감싸줬다. 감싸주지않으면 저 태그자체를 그냥 문자열로 파악해서 적용이되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import emoji
from markupsafe import Markup
from src.shared.logger import logger
def wrap_emojis_with_span(text):
"""
텍스트에 이모지가 있을 경우, 이모지를 <span> 태그로 감싸주는 함수
Html2image 라이브러리에서 이모지를 인식하지 못하는 문제를 해결하기 위해 사용
"""
try:
wrapped_text = ""
for char in text:
if char in emoji.EMOJI_DATA:
# 유니코드 값을 얻기 위해 16진수 형식으로 변환
unicode_value = f"&#x{ord(char):X};"
# <span> 태그로 감싸기
wrapped_text += f'<span class="emoji" style="padding:0;">{unicode_value}</span>'
else:
wrapped_text += char
return Markup(wrapped_text)
except Exception as e:
logger.error("error in wrap_emojis_with_span : %s", e)
return text
그 결과,
굿!
회고
물 들어오니 노 저을 맛이 난다.