본문 바로가기

카테고리 없음

linux에서 한글 출력이 안나올때

소스 상단에
std::locale::global(std::locale(""))
를 선언하면 한글이 정상적으로 출력된다.

std:locale:global은 C의 setlocale과 동일한 역할을 하는 C++의 클래스이다.

setlocale은 세가지 방법으로 사용이 가능하다.

  1. 기본값
    locale을 ""로 정의하는 경우 기존 환경변수인 LANG를 기준으로 문자셋을 설정한다
  2. alias
    특정 alias(e.g. korean)을 지정하는경우 /etc/locale.alias에서 해당 korean의 설정값을 매핑해서 가져온다.
  3. 문자셋
    문자셋 이름(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,"");
 
오늘의 교훈
googling을 열심히 해봐도 역시 man page 만한게 없다. 가까운데서 진리를 찾자