Byte Stream과 같은 Hex로 구성된 ByteArray Object를 문자열로 변환할 때 한글을 포함한 특수문자를 깨짐 없이 표현하기 위해서는 UTF8로 인코딩해야 합니다.

 

구글에서 검색했을 때 대부분의 사람들은 ASCII로 인코딩하는 예시 코드를 공유해주고 있어서, 3~4시간 정도를 낭비했습니다. ㅠㅠ

정확히 변환되는 코드를 찾아서 기록해두었습니다.

 

아래의 코드 예시를 이용하여 변환하세요.

 

[Code] 

    function UTF8stringFromByteArray(data)
    {
        const extraByteMap = [ 1, 1, 1, 1, 2, 2, 3, 0 ];
        var count = data.length;
        var str = "";
        for (var index = 0;index < count;)
        {
            var ch = data[index++];
            if (ch & 0x80)
            {
                var extra = extraByteMap[(ch >> 3) & 0x07];
                if (!(ch & 0x40) || !extra || ((index + extra) > count))
                    return null;
                ch = ch & (0x3F >> extra);
                for (;extra > 0;extra -= 1)
                {
                    var chx = data[index++];
                    if ((chx & 0xC0) != 0x80)
                        return null;
                    ch = (ch << 6) | (chx & 0x3F);
                }
            }
            str += String.fromCharCode(ch);
        }
        return str;
    }

출처 : https://weblog.rogueamoeba.com/2017/02/27/javascript-correctly-converting-a-byte-array-to-a-utf-8-string/

 

 

 

 

 

+ Recent posts