cout
한글출력
표준입출력(표준 출력)을 이용해서 한글을 출력을 하려는 데 출력이 안된다.
샘플 코드를 만드렁서 테스트를 해보니 멀티바이트는 되는데, 유니코드 일 출력이 안된다.
코드 : main.cpp
- #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은 한글이 나오지 않는다.
이번에 개발하는 애플리케이션은 _UNICODE가 적용되었느냐에 따라 선택적으로 알아서 멀티바이트/유니코드가 적용이 되게 했기 때문에 유니코드를 위해 조치가 필요했다.
구글링을 하니 이런 문제에 대해 정리를 해놓은 블로그들이 상당히 있었다.
C++의 wcout 과 wstring 에 대한 질문드립니다.
[완료] STL string 사용시 wstring 일때, 출력이 되지 않습니다. :: KLDP
Standard output으로 unicode 문자를 출력하기 (Win32 console application)
결론
로케일을 설정한다.
방법1 -> 이넘은 실제 해본 결과 안되었다. (위의 블로그중 KLDP 에 이유가 적혀 있음)
locale::global()은 global locale을 설정하는 것일 뿐이므로 그 자체만으로는 이미 생성된 stream에 영향을 미치지는 않습니다.
- std::locale::global(std::locale("korean"));
방법2
- 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)