본문 바로가기

운동하는 개발자/c++

c++ UTF8 to Euc-kr (UTF8 json 한글 데이터 std::string에 저장하기 + ofstream error) feat boost::locale

728x90

웹에서 http통신으로 json 한글이 섞인 데이터를 수신하였는데 UTF-8 타입이였다
이 UTF-8을 그대로 std::string에 넣어서 디렉토리 생성 함수는 정상적으로 동작하였으나
ofstream을 사용하여 파일 open시 에러가 발생하였다.. 

디버깅해보니 한글이 들어간 문자열이 디버깅 환경에서 보이지 않았고
<Invalid characters in string.> 라는 문구를 보여주었다
물론 바이트별로 데이터를 볼 수 있었지만 한글은 ?? 로 표시되었으며 한 글자당 3바이트로 표현되고있었다
원인을 찾아보니 내 visual studio 2022환경에서는 디폴트로 코드페이지에 의해 EUC-KR이 기본이 되는거 같았다 
코트페이지를 변경하거나 뭔가 다른방법이 있겠으나... 코드를 공유하는 같은 팀원들도 같은 이슈를 발생할 수 있다고 생각되서  UTF8을 EUC-KR로 변경하는 함수를 찾아보았다

boost 라이브러리를 통해 간단하게 변경 가능했다

#include <boost/locale.hpp>

std::string Utf8ToEuckr(const std::string& euc_str)
{
// Convert from EUC-KR to UTF-8 using boost::locale::conv::between
return boost::locale::conv::between(euc_str, "EUC-KR", "UTF-8");
}

 

728x90