가상 채팅 클라이언트에서 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 |