티스토리 뷰
반응형
UTF-8 기준 문자열 길이 계산
UTF-8은 문자코드 값에 따라 문자당 1~4 Byte를 사용합니다. JavaScript에서 UTF-8 Byte 길이 계산 시 주의해야 할 부분이 있는데, JavaScript는 내부적으로 문자열을 UTF-16(UCS-2)로 처리하기 때문에 UTF-16의 특성을 고려해주어야 합니다. 예를들어 UTF-8에서 4Byte 문자인 '𒀀'의 경우 UTF-16에서는 문자 2개를 결합하여 표현합니다. 아래 함수는 이러한 특성을 고려하여 작성되어 있습니다.
function getByteLengthOfUtf8(str) {
//UTF8 기준 Byte Length 계산
var byteLength = 0;
for (var i = 0, strLength = str.length; i < strLength; i++) {
var code = str.charCodeAt(i);
if (code < 0x0080) {
//[0x0000, 0x007F]
byteLength += 1;
}
else if (code < 0x0800) {
//[0x0080, 0x07FF]
byteLength += 2;
}
else if (code < 0xD800) {
//[0x0800, 0xD7FF]
byteLength += 3;
}
else if (code < 0xDC00) {
//[0xD800, 0xDBFF]
var codeNext = str.charCodeAt(++i);
if (i < strLength && codeNext >= 0xDC00 && codeNext <= 0xDFFF) {
//followed by [0xDC00, 0xDFFF]
byteLength += 4;
}
else {
throw new Error("UCS-2 String malformed");
}
}
else if (code < 0xE000) {
//[0xDC00, 0xDFFF]
throw new Error("UCS-2 String malformed");
}
else {
//[0xE000, 0xFFFF]
byteLength += 3;
}
}
return byteLength;
}
EUC-KR 기준 문자열 길이 계산
EUC-KR은 ANSI에 한글을 확장한 완성형 코드집합입니다. 문자코드 127까지는 영어, 숫자, 특수문자 등을 1Byte 내에서 표현하며, 문자코드 128부터는 한글을 2Byte로 표현합니다. 따라서 다음과 같은 함수로 계산할 수 있습니다. 개행문자 (Code가 10)인 경우 \r\n임을 고려해 2Byte로 계산하며, 비트 시프트 연산자 >> 7을 사용하여 128부터 2Byte로 계산되도록 하고 있습니다.
function getByteLengthOfEucKr(text) {
//EUC-KR 기준 Byte Length 계산
if (text == null || text == "")
return 0;
var byteLength, i, code;
for (byteLength = i = 0; code = text.charCodeAt(i++); byteLength += (code == 10) ? 2 : ((code >> 7) ? 2 : 1));
return byteLength;
}
출처
- UTF-8 길이계산 함수 : https://gist.github.com/mathiasbynens/1010324
- EUC-KR 길이계산 함수 : https://programmingsummaries.tistory.com/239
'Web > JavaScript' 카테고리의 다른 글
[JavaScript] 진법변환 코드 (0) | 2023.06.19 |
---|
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- Xamarin
- WPF
- material-ui
- Vue
- c#
- TypeScript
- React
- StringComparison
- flutter
- npm
- Xamarin.iOS
- ASP.NET Core
- Xamarin.Forms eBook
- Android
- .NET Standard
- VisualStudio
- ios
- Xamarin.Forms 요약
- Xamarin.Forms
- MS SQL
- Total
- Today
- Yesterday