소스 상단에
std::locale::global(std::locale(""))
를 선언하면 한글이 정상적으로 출력된다.
std::locale::global(std::locale(""))
를 선언하면 한글이 정상적으로 출력된다.
std:locale:global은 C의 setlocale과 동일한 역할을 하는 C++의 클래스이다.
setlocale은 세가지 방법으로 사용이 가능하다.
- 기본값
locale을 ""로 정의하는 경우 기존 환경변수인 LANG를 기준으로 문자셋을 설정한다 - alias
특정 alias(e.g. korean)을 지정하는경우 /etc/locale.alias에서 해당 korean의 설정값을 매핑해서 가져온다. - 문자셋
문자셋 이름(e.g. ko_KR.utf-8)을 직접 설정할 수 있다.
원하는 문자셋이 없는 경우 locale-gen으로 생성할 수 있다.
e.g.) sudo locale-gen ko_KR.EUC-KR
따라서 아래와 같은 세가지 모두 정상적으로 한글을 출력한다.
setlocale(LC_ALL,"ko_KR.utf8");
setlocale(LC_ALL,"korean");
setlocale(LC_ALL,"");
setlocale(LC_ALL,"korean");
setlocale(LC_ALL,"");
오늘의 교훈
googling을 열심히 해봐도 역시 man page 만한게 없다. 가까운데서 진리를 찾자