Daily Develop

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

에디개발자 2021. 7. 2. 07:00
반응형

나를 닮았다고 한다...

외부 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")
            )
        )
    }
반응형