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