2010-05-18 5 views
2

ASCII, UTF8, UTF16, UTF32 문자열을 처리하는 기본 클래스가 4 개있는 C++ 문자열 라이브러리에서 작업하는 모든 클래스에는 입력 문자열을 형식화하고 결과를 stdout 또는 stderr로 인쇄하는 인쇄 기능이 있습니다. . 내 문제는 내가 그 스트림에 대한 기본 문자 인코딩 무엇인지 모르겠다.stdout 및 stderr 문자 인코딩

현재 내 수업은 Windows에서 작동하며, 나중에 Mac 및 Linux에 대한 지원을 추가합니다. 그 스트림 인코딩에 대해 알고 있다면 감사하겠습니다.

내 질문은 : stdout과 stderr의 기본 인코딩은 무엇입니까? 그리고 나중에 인코딩을 변경할 수 있습니까? 그렇다면 데이터가 어떻게 저장 될까요?

감사합니다.

답변

3

표준 출력 및 표준 오류 사용 "C"로케일을 사용할 때마다 당신이 std::stringstd::wcout를 사용할 때마다 당신이 std::cout를 사용한다 가정 할 수 같아요. "C"로켈은 netural이며 대부분의 시스템에서 현재 사용자의 로켈로 변환됩니다.

// Set all categories and return "English_USA.1252" 
setlocale(LC_ALL, "English"); 
// Set only the LC_MONETARY category and return "French_France.1252" 
setlocale(LC_MONETARY, "French"); 
setlocale(LC_ALL, NULL); 

지원되는 로케일 문자열 시스템 및 컴파일러 특정 위치 : setlocale 기능을 사용하여 특정 로케일을 사용하는 프로그램을 강제 할 수 있습니다. "C"및 ""만 지원해야합니다. 당신이 바로하지만 내가 문자열이나 형식 wstring을 사용하지 않는 것

http://www.cplusplus.com/reference/clibrary/clocale/

+0

표준 스트림이 현재 시스템 로케일을 사용한다는 것을 의미합니까? 내 클래스는 시스템이 사용하는 현재 코드 페이지를 감지하고 문자열 데이터를 쓰는 것에 의존한다고 말한 것에 따라 생각합니다. 인코딩이 변경되면 데이터를 스트리밍하는 데 어떤 문제가 발생합니까? –

0

당신은 this SO answer (대부분의 upvoted 대답)을 볼 수 있습니다.

이것은 정확히 귀하의 질문이 아니지만 분명히 관련되어 있으며 많은 유용한 정보를 제공합니다.

나는 여기에 전문가는 아니지만 우리는 당신이 std::wstring.

+0

난 내 자신의 캐릭터 클래스는했습니다 각 하나는 내부 표현을 가지고 있고 그것을 위해 내가 표준 출력 스트림에 인쇄 cout을하거나 wcout을 사용할 수 없습니다 . –

+0

뭔가를 놓칠 수도 있지만 ... 표준'std :: string'과'std :: wstring'이 모든 가능한 인코딩을 다루지 않습니까? 자신 만의 문자열 클래스를 만들 필요가 실제로 있습니까? – ereOn

+1

그 인코딩에 대해서뿐만 아니라, 내 자신의 문자열 클래스를 만들 수있는 너무 많은 이유가있다, 예를 들어 내 클래스에서 복사 및 검색을 위해 mmx를 사용하고, 낭비 메모리가 아닌 값으로 전달할 때 카운터를 참조한다.), 문자열 및 기타 여러 해시 코딩. 사실 저는 ASCII, UTF8 클래스에서 끝내려하고 있습니다.하지만 이제는 인쇄 기능에 머물러 있습니다. –

관련 문제