Header

  1. View current page

    나모의 노트

Profile_img_172x172_09
달인의 노트입니다.ㅋㅋㅋ
42

cout

한글출력

표준입출력(표준 출력)을 이용해서 한글을 출력을 하려는 데 출력이 안된다.

샘플 코드를 만드렁서 테스트를 해보니 멀티바이트는 되는데, 유니코드 일 출력이 안된다.

코드 : main.cpp

  1. #include <string>
    #include <iostream>
    #include <tchar.h>

    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
        const string multibyte("한글");
        cout << multibyte << endl;

        const wstring unicode(L"한글2");
        wcout << unicode << endl;
        return 0;
    }

결과: 멀티바이트용 문자열 클래스인 std::string 는 한글이 출력이 되는데, 유니코드용 문자열 클래스인 std:wstring은 한글이 나오지 않는다.

coutOut.png

이번에 개발하는 애플리케이션은 _UNICODE가 적용되었느냐에 따라 선택적으로 알아서 멀티바이트/유니코드가 적용이 되게 했기 때문에 유니코드를 위해 조치가 필요했다.

 

구글링을 하니 이런 문제에 대해 정리를 해놓은 블로그들이 상당히 있었다.

유니코드에서 콘솔에 한글 출력하기!

wcout 유니코드 한글출력 가능하게 하는 헤더파일.

[VC++] 유니코드를 표준 출력에 내보내기

C++의 wcout 과 wstring 에 대한 질문드립니다.

[완료] STL string 사용시 wstring 일때, 출력이 되지 않습니다. :: KLDP

Standard output으로 unicode 문자를 출력하기 (Win32 console application)

결론

로케일을 설정한다.

방법1 -> 이넘은 실제 해본 결과 안되었다. (위의 블로그중 KLDP 에 이유가 적혀 있음)

locale::global()은 global locale을 설정하는 것일 뿐이므로 그 자체만으로는 이미 생성된 stream에 영향을 미치지는 않습니다.

  1. std::locale::global(std::locale("korean"));

방법2

  1. std::wcout.imbue(std::locale("korean"));

문제 : _tprintf() 함수로 출력을 위해 "_wsetlocale"로 로케일을 바꾸면 wcout으로 한글이 출력이 안된다는 것.

_wsetlocale(LC_ALL, _T("korean"));

 

std::ifstream 에서 한글 파일이름 / 한글 경로 가능하게 하기

#include <locale>

setlocale(LC_ALL, "Korean");

 

가 있으면 되었다. 개발환경: Visual Studio 2008

locale.h를 include하는 것이 아니다!!

 

 

History

Last edited on 12/16/2008 14:03 by 나모

Comments (0)

You must log in to leave a comment. Please sign in.