MinGW 사용 시 mbrtoc32, mbrtoc16 등 각종 함수 비정상 작동하는 경우

mhComa·2023년 2월 18일
0

mbrtoc32mbrtoc16 등 문자 인코딩과 관련된 표준 라이브러리 함수가 오작동하는 경우가 있었다.

나는 TDM-GCC 10.3.0을 사용하고 있었는데,
MinGW-w64 등에서 주로 사용하는 구식 MSCRT(Microsoft Visual C++ Runtime) 구현의 문제였다.

mbrtoc16은 그냥 mbrtowc를 그대로 사용하고 있는데,
setlocale(LC_ALL, "en_US.utf8");을 해도
로케일에 영향받는 mbrlen이 항상 1을 반환해서 생기는 문제였다.
최신 UCRT(Universal C Runtime)에서는 UTF-8 로케일을 지원하는데 구식 런타임에는 이게 안 된다.

기존에 내가 사용하던 TDM-GCC, Mingw-builds 배포는 MSCRT를 사용해 동일한 문제가 발생한다.

UCRT를 사용하는 배포는 WinLibs가 존재한다.
https://winlibs.com/

거기에 더해 WinLibs는 Clang과 LLDB 등 LLVM 기반의 프로그램도 같이 포함해서 배포하고 있다. 많이 유용하다.

TDM-GCC을 한참 애용하고 있었는데 이 문제로 잠시 갈아타게 됐다.
https://jmeubank.github.io/tdm-gcc/

profile
Ich bin ein Hund!

0개의 댓글