반응형
영문만 있는 경우는 문자열은 C/C++에서 UTF-8로 별도의 변환을 필요로 하지 않습니다. 하지만 한글과 같이 멀티 바이트를 사용하는 경우는 별도로 UTF-8로 인코딩 및 디코딩을 해주어야 합니다. 이런 경우 사용할 수 있는 라이브러리가 boost local입니다.
간단한 Multi Byte와 UTF8간의 문자열 변환 예제는 아래와 같습니다.
#include <iostream>
#include <string>
#include <boost/locale.hpp>
using namespace std;
int main(int argc, char* argv[])
{
string str = "{\"name\": {\"first\":\"그레이스\", \"last\":\"Hopper\"}}";
cout << str << endl;
string str_to_utf8 = boost::locale::conv::to_utf<char>(str, "EUC-KR");
cout << str_to_utf8 << endl;
string str_from_utf8 = boost::locale::conv::from_utf<char>(str_to_utf8, "EUC-KR");
cout << str_from_utf8 << endl;
return 0;
}
실행 결과는 아래와 같습니다. 결과의 두번째 줄은 utf-8로 인코딩된 문자열을 출력한 것입니다.
{"name": {"first":"그레이스", "last":"Hopper"}}
{"name": {"first":"洹몃젅?댁뒪", "last":"Hopper"}}
{"name": {"first":"그레이스", "last":"Hopper"}}
사용법은 간단히 멀티바이트를 utf-8로 인코딩 하기 위하여 conv::to_utf를 사용합니다. 반대로 utf-8에서 멀티바이트로 디코딩 하기 위해서는 conv::from_utf를 사용합니다. 참고로 멀티바이트 인코딩 및 디코딩에서 CPC-949와 같은 윈도우 표준은 지원하지 않는 듯 보입니다.
그 외에 utf-16으로 인코딩하기 위해서는 to_utf와 from_utf의 인자를 char에서 wchar_t로 변경하여 주면 됩니다.
이 글은 boost::locale::conv을 참조하였습니다.
반응형
'개발 라이브러리 & 툴' 카테고리의 다른 글
MS 비동기 에이전트 라이브러리 소개: #1 개념 (0) | 2021.12.24 |
---|---|
비주얼스튜디오(Visual Studio) 솔루션(*.sln) 커맨드라인 빌드 응용 (0) | 2021.11.30 |
C++ boost json 구조체와 json 문자열간 변환 예제 (5) | 2021.11.21 |
[MongoDB] C/C++ BSON 한글 문자열 입출력 (0) | 2021.11.20 |
[MongoDB] Mongo C/C++ Driver 관련 자료 (0) | 2021.11.10 |
boost asio address from_string 사용시 주의할 점 (0) | 2021.10.25 |
C++ boost json용 라이브러리(boost.json) (0) | 2021.10.15 |
C++ boost property_tree를 이용한 간단한 xml 파싱 예제 (0) | 2021.10.14 |