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;
}