프로그래밍/C++

[rapidjson] JSON 파일 한글깨짐 문제

고도 2019. 12. 26. 00:27

가상 채팅 클라이언트에서 json을 이용해 서버로 전송할 채팅 메세지를 받아오게끔 설계를 했다.

json 파일의 데이터는 아래와 같으며 UTF-8로 인코딩 되어있었다.

"Chat":
[
    "가나다라마바사",
    "ㅇㅂㅇ/"
	, ...
]

Visual studio에서 고급 저장 옵션 > 유니코드(서명 있는 UTF-8) - 코드페이지 65001로 인코딩을 하고 로드해도 같은 문제가 발생했다.

 

원인은 UTF-8에서 한글은 1글자당 3바이트를 차지하기 때문이었다. 

1글자에 3바이트짜리 6자를 집어넣으니 당연히 문제가 발생할 수 밖에 없었다.

 

해결책은 2가지였다.

1. json파일을 EUC-KR로 Encode한 다음 이용

2. std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t>를 이용하여 utf8 -> wchar_t형식으로 변경해주었다.

#include <locale>
#include <codecvt>

const rapidjson::Value &Value = Doc["Chat"];
assert(Value.IsArry());
std::string jsonString = Value[0].GetString();	//[ea][b0][80][eb] ....
std::wstring_convert<std::codecvt_utf8<wchar_t>,<wchar_t> convertString;
std::wstring wideString = convertString.from_bytes(jsonString);

 

 

'프로그래밍 > C++' 카테고리의 다른 글

enum과 enum class의 차이  (0) 2020.05.15
string literal  (0) 2020.05.15
size_t 그리고 size_type  (0) 2019.12.08
volatile 자료형  (0) 2018.01.23
하노이의 탑  (0) 2015.09.20