개발 라이브러리 & 툴

[MongoDB] C/C++ BSON 한글 문자열 입출력

하늘흐늘 2021. 11. 20. 16:05
반응형

MongoDB는 BSON을 사용합니다. BSON에서 문자열은 UTF-8을 사용합니다. UTF-8과 ANSI의 관계상 영문만 사용한다면 별도의 변환은 필요 없습니다. 그러나 일반적으로 사용하는 한글과 같은 멀티 바이트 문자열이나 유니코드 문자열은 별도로 UTF-8로 인코딩하여야 합니다. 또한 MongoDB에 저장된 문자열을 사용하기 위하여 UTF-8문자열을 한글과 같은 멀티 바이트 문자열이나 유니코드로 디코딩해야 합니다. 
참고로 MongoDB C/C++ Driver API에 한글과 같은 멀티 바이트 문자열을 인자로 넣으면 바이트 수가 틀리다는 류의 에러가 나면서 API가 실행되지 않습니다.

C/C++에서 한글과 같은 멀티바이트 문자열을 UTF-8로 변환하는 방법은 아래와 같습니다.
우선, boost 라이브러리를 사용한다면 기존에 포스팅 했던 boost locale을 이용한 C++에서의 Multi Byte와 UTF8간의 문자열 변환을 참조하시면 됩니다. 

두번째로 윈도우에서 프로그래밍 하시면 Windows API의 문자열 변환 API를 이용한 방법이 있습니다. 이 방법은 Windows API 기반인 관계로 C에서 사용 가능합니다.
참고: C/C++ 문자열 변환 : 멀티바이트 <-> 유니코드 <-> UTF-8

마지막으로 검색해보면 C++ 표준을 이용하는 방법이 있습니다. 그런데 이 방법은 비주얼스튜디오 2019에서 최신 C++ 호환으로 컴파일하니 C++ 17에서 관련 클래스들이 삭제되어 Windows API를 사용할 것을 권장하는 메세지를 가진 에러가 납니다.

참고로 boost json라이브러리도 파싱할 때 UTF-8 이외의 문자가 있을 경우 파싱 에러가 나는 관계로 같이 적용됩니다.

 

 

반응형