Byte수가 틀린것 같습니다.

Byte수가 틀린것 같습니다.

QA

Byte수가 틀린것 같습니다.

답변 3

본문

문자메세지를 보내기 위해 아래와 같은 소스를 사용하였습니다.

그런데 바이트수가 틀린것 같습니다.

예를들어 "수"자를 쓰면 2바이트가 맞는것 같은데 3바이트라고 찍힙니다.

바이트수를 제대로 나타낼 수 있도록 도와주세요

 


        <div class="text_box2">
<div class="count" ><span>0</span>byte / 2000byte</div>
      <textarea name="m_content" id="m_content"  rows="25" style="width:250px"></textarea>
                                    <script>
                                 function getByteLength(str) {
            let byteLength = 0;
            for (let i = 0; i < str.length; i++) {
                const charCode = str.charCodeAt(i);
                if (charCode <= 0x007F) {
                    byteLength += 1; // 아스키 문자는 1바이트
                } else if (charCode <= 0x07FF) {
                    byteLength += 2; // 2바이트 문자
                } else {
                    byteLength += 3; // 3바이트 문자 (한글 등)
                }
            }
            return byteLength;
        }
        $('#m_content').keyup(function () {
            const content = $(this).val();
            const byteLength = getByteLength(content);
            $('.text_box2 .count span').html(byteLength);
            if (byteLength > 2000) {
                alert("최대 2000바이트까지 입력 가능합니다.");
                // 입력을 2000바이트로 제한
                let trimmedContent = content;
                while (getByteLength(trimmedContent) > 2000) {
                    trimmedContent = trimmedContent.substring(0, trimmedContent.length - 1);
                }
                $(this).val(trimmedContent);
                $('.text_box2 .count span').html(getByteLength(trimmedContent));
            }
        });
                                    </script>
            </div>
 

이 질문에 댓글 쓰기 :

답변 3


<div class="text_box2">
  <div class="count"><span>0</span>byte / 2000byte</div>
  <textarea name="m_content" id="m_content" rows="25" style="width:250px"></textarea>
</div>
<script>
function getByteLength(str) {
  let byte = 0;
  for (let i = 0; i < str.length; i++) {
    // 한글 체크: AC00(가)~D7AF(힣) 범위에 있는 문자
    if (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7AF) {
      byte += 2; // 한글은 2바이트
    } else {
      byte += 1; // 그외 문자는 1바이트
    }
  }
  return byte;
}
$('#m_content').on('input', function() {
  const content = $(this).val();
  const byteLength = getByteLength(content);
  $('.text_box2 .count span').text(byteLength);
  
  if (byteLength > 2000) {
    alert("최대 2000바이트까지 입력 가능합니다.");
    let trimmedContent = content;
    while (getByteLength(trimmedContent) > 2000) {
      trimmedContent = trimmedContent.slice(0, -1);
    }
    $(this).val(trimmedContent);
    $('.text_box2 .count span').text(getByteLength(trimmedContent));
  }
});
</script>

보통 한글은

utf-8에선 3바이트로 계산하시면 됩니다.

euc-kr로 작업시에는 2바이트로 계산되는것으로 알고있어요.

 

요새는 대부분 utf-8로 작업하니 현 작업파일은 utf-8이 아닐까 합니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,423
© SIRSOFT
현재 페이지 제일 처음으로