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 버전입니다.

2답변

  • 좋아요

    0

    싫어요
    채택취소하기
    • 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: 가나다라한글
    

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

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

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.