C++에서 유니코드 한글 출력 질문드립니다.


#include <iostream>
#include <clocale>
using namespace std;

int main() {
    setlocale(LC_ALL, "");

    wchar_t str1[] = L"WBCS 1";
    wchar_t str2[100];
    wchar_t str3[50];

    wcout << str1 << endl;
    wcout << L"string size: " << sizeof(str1) << endl;
    wcout << L"string length: " << wcslen(str1) << endl;

    wcout << endl;

    wcout << L"input string 1: ";
    wcin >> str2;
    wcout << L"input stirng 2: ";
    wcin >> str3;

    wcscat(str2, str3);

    wcout << L"string 1 + string 2: " << str2 << endl;

    return 0;
}

분명 소스 파일의 인코딩을 UTF-8로 설정했는데도 불구하고 wcin 부분에서 한글 입/출력이 안 됩니다.

뭐가 문제인 건가요?

컴파일 환경은 g++ 6.3.0 버전입니다.


조회수 95


Banner bitmango

2 답변


쉘에서 locale 명령으로 현재 적용중인 로케일 확인이 필요합니다.

allinux@allinux-DESKTOP:~:> locale
LANG=ko_KR.UTF-8
LANGUAGE=
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=
  • 2018년 01월 12일에 작성됨

  • 아 작업환경은 윈도우 10입니다. 혹시나 해서 SetConsoleOutputCP(65001); 명령으로 출력 콘솔을 UTF-8로 설정했는데 결과는 똑같네요.     Hyeonwoo O   2018.1.13 02:14     
  • vc에서는 어떤가요?    정영훈   2018.1.13 18:53     
  • VS2017에서도 출력이 안 되네요. 코드 자체가 잘못된 거 같은데 어디가 문제인지 모르겠습니다...    Hyeonwoo O   2018.1.13 22:54     

  • ubuntu 16.04(gcc version 5.4.0 20160609)
(py36) allinux@allinux-DESKTOP:~:> g++ -o main2 main2.cpp
(py36) allinux@allinux-DESKTOP:~:> ./main2
WBCS 1
string size: 28
string length: 6

input string 1: 한글
input stirng 2: 가나다라
string 1 + string 2: 한글가나다라
  • windows 10 x64 visual c++ 2017(MSVC++ 14.1)
WBCS 1
string size: 14
string length: 6

input string 1: 가나다라
input stirng 2: 한글
string 1 + string 2: 가나다라한글

저는 문제없이 한글이 잘 출력됩니다.

리눅스의 로케일은 윗 답변과 같습니다.

  • 2018년 01월 14일에 작성됨

  • 제가 가나다라를 입력해 보니 cX라고만 출력됩니다.;;    Hyeonwoo O   2018.1.14 19:48     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close