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('힣')
2020. 12. 4. 14:32

python 한글2글자, 영문1글자로 글자수 계산

요즘은 세상이 좋아져서 한글도 1글자(byte의 개념이 아님!!), 영어도 1글자로 처리가 되줘서 크게 불편한것 없이 살고는 있지만, 가끔 통신이나 Byte단위로 뭐 해야 할때 한글2글자, 영문 1글자로 글자수 계산해야 하는 경우가 있음

(진지하게 따지면 한글 3byte...뭐 그런 얘기가 나오는게 맞지만 그렇게 까지 계산해야 하는 상황이면 보통 그냥 전문 통신 말고 API같은걸로 만들어달라고 하는게 나을것임 -_-))

 

어디까지나 필요할때 잠깐 써먹기 위해서 여기 저장해 놓음

 

import re

def korlen(str):    
	korP = re.compile('[\u3131-\u3163\uAC00-\uD7A3]+',re.U)    
    temp = re.findall(korP, str)    
    temp_len = 0    
    for item in temp:
    	temp_len = temp_len + len(item)
    return len(str) + temp_len
        
test = "안녕하세요, 이것은 테스트 12345 입니다.ㅋㅋㅋ Hello!!!"  
# 길이 37, 한글 2바이트 기준 54 (한글 17자)
print(korlen(test))