Programming

C++에서 UTF-8 사용

steloflute 2016. 2. 6. 23:30

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