2023. 1. 31. 16:55

python 한글 반영해서 byte단위로 문자열 잘라주는 함수

버그나 문제점이 좀 있긴 하겠지만,

일단 전체적인 틀은 아래와 같음

실 적용에는 좀더 제대로 고민해서 만들 필요는 있을 것임

 

import re

# 문자열을 바이트 단위로 슬라이스 해주는 함수
# iByteStart = 시작위치, iByteEnd = 종료위치, strTarget = 자를 문자열, iHangulSize = 한글을 몇바이트로 계산할지 여부(기본값2)
def getSliceByte(iByteStart, iByteEnd, strTarget, iHangulSize = 2):
    strReturn = ""
    iCurrPos = 0
    lstTarget = list(strTarget)
    for char in lstTarget:
        if(iByteStart <= iCurrPos and iByteEnd > iCurrPos):
            strReturn = strReturn + char
            # print(f"strReturn = {strReturn}")
        elif (iByteEnd < iCurrPos):
            break
        if(len(re.findall(u'[\u3130-\u318F\uAC00-\uD7A3]+',char)) > 0):
            # 한글임
            iCurrPos = iCurrPos + iHangulSize
        else:
            iCurrPos = iCurrPos + 1
        # print(f"iCurrPos = {iCurrPos}")
    return strReturn

 

추가 : chat GPT가 한글을 파악하는 다른 방법을 알려줌... 이게 정규식보다 빠르고 좋을것 같음 아래 함수 응용해서 위의 소스 수정하면 될듯

def is_korean(char):
    # Check if the character is a Korean character
    return ord(char) >= ord('가') and ord(char) <= ord('힣')