개발자 포럼

필독사항1 : 질문을 올릴 경우 답변자는 뛰어난 분석학자나 심리학자가 아님을 유의하세요. 
필독사항2 : 반드시 구체적인 설명과 코드 그리고 오류 메시지 및 캡처 이미지를 함께 올려주세요. 

 

이번에는 파이썬에서 PHP UTF-8 한글 자르기와 같은 내용으로 다뤄보겠습니다.

 

PHP와 마찬가지로 완성형 한글에서 한글 2바이트, 영어 1바이트 기준으로 잘라줍니다.

 

- UTF-8 한글 자르기

 

#-*- encoding: utf-8 -*-
import re

def strcut_utf8(str, destlen, checkmb=True, tail=""):
        """
         UTF-8 Format
          0xxxxxxx = ASCII, 110xxxxx 10xxxxxx or 1110xxxx 10xxxxxx 10xxxxxx
          라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 아르메니아 문자, 히브리 문자, 아랍 문자 는 2바이트
          BMP(Basic Mulitilingual Plane) 안에 들어 있는 것은 3바이트(한글, 일본어 포함)
        """
        slen = len(str)
        tlen = len(tail)

        if slen <= destlen:
                return str

        pattern = "[\xE0-\xFF][\x80-\xFF]{2}|."
        count=0
        text = []
        for match in re.finditer(pattern, str):
                if len(checkmb == True and match.group(0)) > 1:
                        count = count + 2
                else:
                        count = count + 1
                if (count + tlen) > destlen:
                        return "".join(text) + tail
                text.append(match.group(0))

        return "".join(text)

 

다음과 같이 5바이트를 잘라야하는데 완성형 한글 기준으로 봤을 때 5바이트 시작은 한글 '다'의 앞쪽 코드이기 때문에 한글이 깨어지지 않도록 4바이트까지만 잘라서 "가나" 문자열을 리턴합니다.

 

    print strcut_utf8("가나다라마바사아자차카타파하", 5, True, "")

    가나

 

아래와 같이 strlen 함수도 가능합니다.

 

- 완성형 한글 기준 크기 알아내기

 

#-*- encoding: utf-8 -*-
import re

def strlen_utf8(str):
        """
         UTF-8 Format
          0xxxxxxx = ASCII, 110xxxxx 10xxxxxx or 1110xxxx 10xxxxxx 10xxxxxx
          라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 아르메니아 문자, 히브리 문자, 아랍 문자 는 2바이트
          BMP(Basic Mulitilingual Plane) 안에 들어 있는 것은 3바이트(한글, 일본어 포함
)
        """
        pattern = "[\xE0-\xFF][\x80-\xFF]{2}|."
        count = 0
        for match in re.finditer(pattern, str):
                if len(match.group(0)) > 1:
                        count = count + 2
                else:
                        count = count + 1
        return count
List of Articles

오픈TIP NodeJS 에서 Promise 를 사용하여 MMS 문자 발송예제 file

오픈TIP NodeJs 에서 간단히 REST API 1.x버전 문자보내기

오픈TIP [Python] UTF-8 한글 자르기

오픈TIP 닷넷에서 coolSMS 인증코드 만들기 [1]

오픈TIP 구글독스 스프레드시트 문자발송 애드온 만들기 file

오픈TIP C# Sohot 연동 방법 공유 [2]

오픈TIP XE 새글, 댓글 알림 애드온 만들기 file

오픈TIP [JAVA] 톰캣 JSP에서 사용시 한글 깨지는 문제 해결하기

오픈TIP CTM-PHP v2.3 에서 미국, 일본, 중국 등 해외문자 보내기

오픈TIP VisualStudio 2008 에서 SoHot SMS 컴포넌트를 MFC프로젝트에 적용하기

오픈TIP 오라클 10g 에서 Open Agent 빌드할 때 stdc++라이브러리 버젼에 따른 링크오류 해결하기 file

오픈TIP 안드로이드폰에서 쿨에스엠에스 문자 보내기 file

오픈TIP [PHP] UTF-8 유니코드 한글 자르기