λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⭐ Personal_Study/Java

Java λ¬Έμžμ—΄μ—μ„œ 이λͺ¨μ§€ μ œκ±°ν•˜λŠ” 법

by ν¬μŠ€νŠΈμ‰μ΄ν¬ 2023. 3. 31.

Java λ¬Έμžμ—΄μ—μ„œ 이λͺ¨μ§€ μ œκ±°ν•˜λŠ” 법

문제

이λͺ¨μ§€λ‘œ 된 λ¬Έμžμ—΄μ„ sql에 μ‚½μž…ν•˜λ €κ³  ν•˜μž μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

원인

MySqlμ—μ„œ 일반적으둜 λ¬Έμžμ—΄ 인코딩을 utf8mb3으둜 ν•˜κ²Œ λœλ‹€.

이런 μƒν™©μ—μ„œ 4λ°”μ΄νŠΈμΈ 이λͺ¨μ§€λ₯Ό μ €μž₯ν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

ν•΄κ²°

2가지 ν•΄κ²°μ±…

해결책은 두 가지가 μžˆλ‹€.

  1. MySqlμ—μ„œ ν•΄λ‹Ή ν…Œμ΄λΈ”κ³Ό 칼럼의 데이터 νƒ€μž…μ„ utf8mb4둜 λ°”κΏ”μ€€λ‹€.
  2. db에 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ•Œ μ •κ·œμ‹μœΌλ‘œ 이λͺ¨μ§€λ₯Ό μ œκ±°ν•˜κ³  μ‚½μž…ν•œλ‹€.

λ‚΄ μ‚¬λ‘€μ—μ„œλŠ” μ €μž₯ν•˜κ³ μž ν•˜λŠ” κ°’μ—μ„œ 이λͺ¨μ§€κ°€ μ€‘μš”ν•œ μš”μ†Œκ°€ μ•„λ‹ˆκ³ , μ„œλΉ„μŠ€μ— μ§μ ‘μ μœΌλ‘œ ν™œμš©λ˜λŠ” 뢀뢄이 μ—†μ–΄μ„œ 2λ²ˆμ„ μ„ νƒν–ˆμ§€λ§Œ 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” 1번이 더 λ‚˜μ€ 해결책일 것이닀.

Javaμ—μ„œ μ •κ·œμ‹μœΌλ‘œ 이λͺ¨μ§€ ν•„ν„°λ§ν•˜κΈ°

// 이λͺ¨μ§€ νŒ¨ν„΄
private final Pattern EMOJI_PATTERN = Pattern.compile("[\uD83C-\uDBFF\uDC00-\uDFFF]+");

// 이λͺ¨μ§€ 제거
private String removeEmojis(String input) {
    return EMOJI_PATTERN.matcher(input).replaceAll("");
}

μ•„λž˜λŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν™œμš©ν•œ μ„œλΉ„μŠ€ μ½”λ“œμ˜ 일뢀뢄이닀.

List<GameVideo> collect = resultList.stream()
        .map(r -> GameVideo.builder()
                .youtubeId(r.getId().getVideoId())
                // 이λͺ¨μ§€λ₯Ό μ œκ±°ν•˜κ³  μ‚½μž…!
                .youtubeName(removeEmojis(r.getSnippet().getTitle()))
                .game(gameRepository.findByGameId(gameId).get())
                .createdAt(LocalDateTime.now())
                .build())
        .collect(Collectors.toList());

'⭐ Personal_Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

JPA: μ§€μ—°λ‘œλ”©κ³Ό μ„±λŠ₯ μ΅œμ ν™”  (0) 2023.03.10
집합 (Set)  (1) 2022.12.20
μƒμˆ˜μ§‘ν•©(Enum)  (1) 2022.12.19
맡(Map)  (0) 2022.12.18
λ°°μ—΄(Array) & 리슀트(List)  (0) 2022.12.17

λŒ“κΈ€