source: http://trowind.tistory.com/61
자바나 파이썬에 비하면 C++의 UTF-8 지원은 미약한 것이 사실이다. 하지만, locale만 잘 설정하면 wstirng, win, wout, wifstream 등을 이용해 UTF-8 데이터를 쉽게 사용할 수 있다.
전체 locale 설정하기
한글(과 중국어)가 포함된 UTF-8 데이터를 다룬다면 다음과 같이 설정해주는 것이 좋다. 그리고 소스코드 역시 UTF-8 로 인코딩 되게 하는 것이 좋다. 다시 말하면, 프로그래밍할 때 사용하는 에디터도 UTF-8로 설정할 것을 권장한다.
#include <locale>
int main(void)
{
std::locale::global(std::locale("ko_KR.UTF-8")); // 맨 처음 한번 실행
...
}
부분적으로 locale 설정하기
어떤 이유로 인해 특정 부분에서만 화면 입출력을 UTF-8로 하고자 한다면 다음과 같이 설정한 다음에 사용한다.
wcout.imbue(std::locale("ko_KR.UTF-8"));
win.imbue(std::locale("ko_KR.UTF-8"));
문자열 상수 입력
UTF-8 문자열 상수임을 표시하기 위해서는 왼쪽 큰따옴표 앞에 'L'을 붙여주면 된다.
wstring hangul = L"한글";
wstring chinese = L"葡萄酒跳蚤";
assert ( hangul[1] == L'글' ); // 두번째 글자는 '글'
assert ( chinese[0] == L'葡'); // 첫번째 글자는 '葡'
파일 읽기, 쓰기
wifstream과 wstring을 이용하면 UTF-8로 인코딩된 파일을 읽을 수 있다.
wstring buff;
wifstream ifs("utf8_file.txt");
while ( getline(ifs, buff) ) { // 파일을 처음부터 끝까지 한줄씩 (마지막 \n 은 자동으로 제거됨) 읽음.
do_something();
}
'Programming' 카테고리의 다른 글
C/C++ macros (0) | 2016.02.21 |
---|---|
C++에서 UTF8, Unicode, Ansi 문자열 변환.. (0) | 2016.02.08 |
자바 디자인 패턴 5 - Singleton (0) | 2016.01.21 |
(Go) slice literal (0) | 2016.01.20 |
Dealing with encodings in Go (0) | 2016.01.20 |