파이썬으로 dxf 파일을 읽고 특정 레이어를 추출하는 작업 진행 중, 에러가 발생하였습니다. 바로 "decoding with 'euc-kr' codec failed"라는 메시지였습니다. 오늘은 ezdxf, 에러 원인, 에러 해결방법에 대하여 알아보겠습니다.
1. ezdxf 라이브러리
ezdxf 라이브러리는 Python용 DXF(Drawing Exchange Format) 파일 처리 라이브러리로, CAD 도면을 생성, 수정, 분석할 수 있습니다. DXF 버전 R12부터 R2018까지 지원하며, 2D 및 3D 객체(선, 원, 폴리라인, 블록 등)를 쉽게 조작할 수 있습니다.
또한, 레이어 관리, 도면 변환, 텍스트 및 치수 조작 기능을 제공하며, DXF 파일을 SVG, PDF 등으로 내보낼 수도 있습니다. CAD 소프트웨어 없이 DXF 데이터를 프로그래밍 방식으로 처리하는 데 유용합니다.
2. 에러 메시지 분석
에러 메시지에서 'euc-kr' 코덱으로 디코딩하는 데 실패했다는 것은, 해당 파일이 예상한 인코딩 형식과 다르다는 것을 의미합니다.
일반적으로 dxf 파일은 UTF-8 인코딩을 사용하지만, 특정 환경에서는 다른 인코딩이 사용될 수 있습니다. 이로 인해 파이썬이 파일을 제대로 읽지 못하고 에러가 발생하게 됩니다.
- error message : decoding with 'euc-kr' codec failed
3. 해결 방법 탐색
구글과 네이버에서 다양한 해결 방법을 찾아보았습니다. 여러 블로그와 포럼에서 제안하는 방법들은 다음과 같았습니다:
- 인코딩 변경 : 프로그램 첫번째 줄에 인코딩을 'utf-8'로 지정하는 방법 입력. 또는 'euc-kr' 입력
#-*- coding: utf-8 -*-
또는
#-*- coding: euc-kr -*- - 파일 변환 : 메모장이나 다른 텍스트 편집기를 사용하여 파일을 UTF-8로 저장하는 방법
두가지 방법을 각각 적용해 보았으나, 아무런 효과가 없었습니다. 인터넷 상의 코딩 문제는 csv, 엑셀, txt 파일을 읽을때 발생하는 에러이며, ezdxf 라이브러리 실행시 발생되는 코딩 문제를 해결하는 방법이 없었습니다.
4. 뤼튼 AI를 통한 문제 해결
이런 방법들을 시도해 보았지만, 해결되지 않았습니다. 그러던 중, 뤼튼 AI에 에러 코드를 복사하여 넣어보았습니다. 혹시나 하고 시도해 보았는데 AI는 에러의 원인을 파악하고, 적절한 해결책을 제시해 주었습니다.
그 결과, 문제를 해결할 수 있었습니다. 뤼튼 AI의 도움을 받으니, 인터넷 검색보다 훨씬 빠르고 정확하게 문제를 해결할 수 있었습니다.
4.1 뤼튼 AI 해결방법
뤼튼 AI에서 제안한 해결 방법입니다.
font_manager.py 파일을 열여서 family = record.string.decode 열을 수정하라고 합니다. 수정전/후는 다음과 같습니다:
- (수정전) family = record.string.decode(record.getEncoding())
- (수정후) family = record.string.decode('utf-8', errors='replace')
font_manager.py 파일에서 해당구분의 함수(def) 영역은 다음과 같습니다.
def get_ttf_font_face(font_path: Path) -> FontFace:
try:
ttf = TTFont(font_path, fontNumber=0)
except IOError:
return FontFace(filename=font_path.name)
names = ttf["name"].names
family = ""
style = ""
for record in names:
if record.nameID == 1:
# family = record.string.decode(record.getEncoding()) # 수정전 (원본)
family = record.string.decode('utf-8', errors='replace') # 수정후 (뤼튼 AI)
elif record.nameID == 2:
style = record.string.decode(record.getEncoding())
if family and style:
break
try:
os2_table = ttf["OS/2"]
except Exception: # e.g. ComickBook_Simple.ttf has an invalid "OS/2" table
logger.info(f"cannot load OS/2 table of font '{font_path.name}'")
weight = 400
width = 5
else:
weight = os2_table.usWeightClass
width = os2_table.usWidthClass
return FontFace(
filename=font_path.name,
family=family,
style=normalize_style(style),
width=width,
weight=weight,
)
위의 코드를 적용하여 수정한 'font_manager.py' 구성은 다음과 같습니다.
5. 결론
앞으로는 프로그램에서 발생하는 에러 문제를 해결할 때, 인터넷 검색보다 AI에게 문의하는 것이 더 나을 것 같습니다. AI는 빠르게 문제를 분석하고, 적절한 해결책을 제시해 주기 때문입니다.
이처럼 파이썬을 사용하면서 발생하는 다양한 에러를 해결하는 과정은 쉽지 않지만, 뤼튼 AI와 같은 도구를 활용하면 훨씬 수월하게 문제를 해결할 수 있습니다.
앞으로도 이러한 경험을 바탕으로 더 나은 코드를 작성할 수 있도록 노력하겠습니다.
5.1 이미지 생성
아래는 컴퓨터로 코딩을 하는 이미지를 생성한 결과 입니다. Bing으로 생성했습니다.
두번째 이미지 생성한 결과입니다.
세번째 이미지는 Leonard 결과 입니다. 무료로 사용하는 결과를 볼때 Bing 결과가 좀더 낳은 것 같습니다.
5.2 프롬프트
아래는 이미지 생성에 사용한 프롬프트 입니다. 필요하신 분들은 참고하세요.
"A beautiful Korean woman in her 20s sitting in front of a computer, coding. She is focused on the screen, surrounded by coding books, a laptop, and a coffee cup. She is wearing casual, bright-colored clothing, and her long hair flows naturally. The background is a cozy office space with sunlight streaming in through the window."
댓글