[코틀린] 한글 깨질 때 인코딩처리

2021. 7. 2. 07:00·Daily Develop
반응형

나를 닮았다고 한다...

외부 API를 사용할 때 흔히 겪는 문제 중 하나로 한글깨지는 문제가 있습니다. 현재는 대부분 utf-8로 사용하지만 생성된지 오래된 경우에는 다양한 인코딩이 적용되어 한글이 깨져서 골머리 썩은 경험이 많을 것입니다. 

 

getMsg() 메소드를 이용하여 한글이 안깨지는 인코딩 방식을 사용합니다.

private fun getMsg(msg: String) {
        println("utf-8 -> euc-kr    : " + String(msg.toByteArray(Charset.forName("utf-8")), Charset.forName("euc-kr")))
        println("utf-8 -> ksc5601   : " + String(msg.toByteArray(Charset.forName("utf-8")), Charset.forName("ksc5601")))
        println(
            "utf-8 -> x-windows-949 : " + String(
                msg.toByteArray(Charset.forName("utf-8")),
                Charset.forName("x-windows-949")
            )
        )
        println(
            "utf-8 -> iso-8859-1  : " + String(
                msg.toByteArray(Charset.forName("utf-8")),
                Charset.forName("iso-8859-1")
            )
        )
        println(
            "iso-8859-1 -> euc-kr    : " + String(
                msg.toByteArray(Charset.forName("iso-8859-1")),
                Charset.forName("euc-kr")
            )
        )
        println(
            "iso-8859-1 -> ksc5601   : " + String(
                msg.toByteArray(Charset.forName("iso-8859-1")),
                Charset.forName("ksc5601")
            )
        )
        println(
            "iso-8859-1 -> x-windows-949 : " + String(
                msg.toByteArray(Charset.forName("iso-8859-1")),
                Charset.forName("x-windows-949")
            )
        )
        println(
            "iso-8859-1 -> utf-8    : " + String(
                msg.toByteArray(Charset.forName("iso-8859-1")),
                Charset.forName("utf-8")
            )
        )
        println("euc-kr -> utf-8    : " + String(msg.toByteArray(Charset.forName("euc-kr")), Charset.forName("utf-8")))
        println(
            "euc-kr -> ksc5601   : " + String(
                msg.toByteArray(Charset.forName("euc-kr")),
                Charset.forName("ksc5601")
            )
        )
        println(
            "euc-kr -> x-windows-949 : " + String(
                msg.toByteArray(Charset.forName("euc-kr")),
                Charset.forName("x-windows-949")
            )
        )
        println(
            "euc-kr -> iso-8859-1  : " + String(
                msg.toByteArray(Charset.forName("euc-kr")),
                Charset.forName("iso-8859-1")
            )
        )
        println(
            "ksc5601 -> euc-kr    : " + String(
                msg.toByteArray(Charset.forName("ksc5601")),
                Charset.forName("euc-kr")
            )
        )
        println(
            "ksc5601 -> utf-8    : " + String(
                msg.toByteArray(Charset.forName("ksc5601")),
                Charset.forName("utf-8")
            )
        )
        println(
            "ksc5601 -> x-windows-949 : " + String(
                msg.toByteArray(Charset.forName("ksc5601")),
                Charset.forName("x-windows-949")
            )
        )
        println(
            "ksc5601 -> iso-8859-1  : " + String(
                msg.toByteArray(Charset.forName("ksc5601")),
                Charset.forName("iso-8859-1")
            )
        )
        println(
            "x-windows-949 -> euc-kr  : " + String(
                msg.toByteArray(Charset.forName("x-windows-949")),
                Charset.forName("euc-kr")
            )
        )
        println(
            "x-windows-949 -> utf-8   : " + String(
                msg.toByteArray(Charset.forName("x-windows-949")),
                Charset.forName("utf-8")
            )
        )
        println(
            "x-windows-949 -> ksc5601  : " + String(
                msg.toByteArray(Charset.forName("x-windows-949")),
                Charset.forName("ksc5601")
            )
        )
        println(
            "x-windows-949 -> iso-8859-1 : " + String(
                msg.toByteArray(Charset.forName("x-windows-949")),
                Charset.forName("iso-8859-1")
            )
        )
    }
반응형

'Daily Develop' 카테고리의 다른 글

ThreadPoolTaskExecutor Queue가 full의 처리 정책  (1) 2021.12.21
[JPA] deleteAll() vs deleteAllInBatch()  (0) 2021.07.28
[HttpStatus] API 처리 별 HttpStatus 리턴 코드 정리  (0) 2021.07.13
[Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의  (3) 2021.06.18
[javascript] '==', '===' 차이 ( 나의 삽질.. )  (0) 2020.11.25
'Daily Develop' 카테고리의 다른 글
  • [JPA] deleteAll() vs deleteAllInBatch()
  • [HttpStatus] API 처리 별 HttpStatus 리턴 코드 정리
  • [Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의
  • [javascript] '==', '===' 차이 ( 나의 삽질.. )
에디개발자
에디개발자
------ 한발자국씩 성장하자 ------ Github: https://github.com/yongtaelim LinkedIn: https://www.linkedin.com/in/%EC%9A%A9%ED%83%9C-%EC%9E%84-622b69218/
    250x250
  • 에디개발자
    에디블로그
    에디개발자
    • 분류 전체보기 (245) N
      • Develop (51)
        • spring-data (28)
        • spring-batch (7)
        • devops (5)
        • java (5)
        • kotlin (3)
        • database (2)
      • MindControl (12)
      • TroubleShooting (16)
      • Study (76)
        • kotlin (16)
        • java (15)
        • spring (6)
        • test (4)
        • message-queue (10)
        • object (22)
      • Develop Tool (1)
      • Daily Develop (7)
      • Book (5)
      • AI (56) N
        • Claude (23) N
        • ChatGPT (11) N
        • Cursor (10) N
        • Gemini (8) N
        • 트랜드 (4)
      • 개발 트렌드 (17) N
        • 데일리 픽 (17) N
        • 툴 리뷰 (0)
      • 개발자 도구 (0)
        • 생산성 툴 (0)
        • 노트 & 지식관리 (0)
        • 협업 & 이슈 (0)
        • 터미널 & 환경 (0)
        • API & DB (0)
        • 에디터 & IDE (0)
  • 인기 글

  • 태그

    ai 코딩
    Ai
    anthropic
    스터디
    ChatGPT
    클로드
    엘레강트
    OpenAI
    claude code
    에디
    claude
    cursor
    AI 활용
    프로그래밍
    ai 정보
    객체지향
    queryDSL
    JPA
    코틀린
    개발자 도구
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에디개발자
[코틀린] 한글 깨질 때 인코딩처리
상단으로

티스토리툴바