UTF-8은 ASCII 코드값은 1바이트로, 유럽권 문자는 2바이트로, 아시아권 문자는 3바이트로 구성함으로써 전세계 모든 언어를 처리할 수 있는 유니코드 중 하나입니다. 저는 기존에 편의상 EUC-KR을 사용했으나 이제부터는 UTF-8을 먼저 고려하고 사용해야한다고 생각하게 되었습니다.
아래의 코드는 DataView 객체에 저장된 UTF-8 코드값으로부터 String으로 구성하는 코드입니다. 변환 속도를 위해 다소 코드가 난해 합니다. 제가 개발한 서버에서 문자열 데이터를 UTF8로 인코딩된 바이너리 데이터로 웹브러우저로 보내게 되는데 이때 사용한 코드입니다.
function getStringUTF8(dataview, offset, length) { var s = ''; for (var i = 0, c; i < length;) { c = dataview.getUint8(offset + i++); s += String.fromCharCode( c > 0xdf && c < 0xf0 && i < length - 1 ? (c & 0xf) << 12 | (dataview.getUint8(offset + i++) & 0x3f) << 6 | dataview.getUint8(offset + i++) & 0x3f : c > 0x7f && i < length ? (c & 0x1f) << 6 | dataview.getUint8(offset + i++) & 0x3f : c ); } return s; }
짧은 코드이지만 몇일 동안 고민하고 고민하던 차에 만난... 저에게는 매우 의미있고 값진 코드입니다. ^^;
감사합니다. 코드 매우 잘 동작하네요. 찾던 로직이라! 감사합니다.
정말 감사드립니다. 웹소켓 중 문제를 해결했습니다. 복 받으세요!