2012-06-05 5 views
1

번호 : 콘솔Windows 콘솔에 국제 문자를 보내는 방법은 무엇입니까?

#include <windows.h> 

int main() { 
    SetConsoleOutputCP(CP_UTF8); 
    system("echo Ιλιάδα"); 
} 

인쇄 : Ιλιάδα 원본 BOM과 UTF-8 인코딩된다.

하지만 시도 : system(L"echo Ιλιάδα");, 오류 : error: cannot convert 'const wchar_t*' to 'const char*' for argument '1' to 'int system(const char*)'. 그리고 물론 저는 여기에 다른 것을 기대하지 않았습니다. 이 문자들을 받아들이는 다른 함수가 있습니까?

답변

3

넓은 문자열의 경우 _wsystem을 사용하십시오.

+0

고맙습니다. 작동합니다. – rsk82

0

이 VC++입니까?

그렇다면 파일이 BOM이없는 UTF-8을 사용하고있는 것으로 나타납니다. 즉, VC++는 원본 charset과 실행 charset이 같다고 가정하므로 문자열 리터럴 " echo Ιλιάδα ". 단순히 UTF-8 데이터를 직접 출력합니다. 이것은 컴파일러가 system("echo Ιλιάδα");이라고 쓰고 있다고 생각합니다. 그 쓰레기는 시스템의 로케일 인코딩 인 것처럼 보이는 UTF-8 문자열입니다. 기본적으로

system() 기능은 시스템의 로케일 인코딩의 문자열을 사용합니다. 콘솔 출력 코드 페이지는 system()의 작업에 영향을 미치지 않으므로 위의 문자열은 정확히 동일한 내용입니다.


BOM없이 UTF-8을 사용하고 있으므로 넓은 문자열에 문제가 발생합니다. 넓은 문자열을 생성하려면 원본 charset을 wide 실행 charset으로 올바르게 변환해야합니다. BOM이없는 UTF-8을 사용하는 경우 VC++은 올바른 소스 인코딩을 알지 못하므로이 변환을 올바르게 수행 할 수 없습니다.

+0

인코딩은 BOM과 같으며 MinGW를 사용합니다. – rsk82

0

당신은 시스템을 시도 할 수 있습니다 ("cmd를/C lambdabath") 또는 시스템의 예에서와 같이 ("lambdabath") :

//Save As UTF-8 withput BOM signature 

#include <stdlib.h> 
#include <windows.h> 

int main() { 
    SetConsoleOutputCP(CP_UTF8); 
    //system("cmd /c lambdabath"); 
    system("lambdabath"); 
} 

lambdabath.bat (또한 BOM 서명없이 UTF-8로 저장) :

chcp 65001 
echo Ιλιάδα 

질문 : 국제 문자를 Windows 콘솔로 보내는 방법은 무엇입니까?
그럼 당신은 다른 인코딩을 시도 할 수 있습니다. function system()을 사용하지 않아도됩니다.

윈도우 1,253 인코딩 :

//Save As Windows 1253 

#include <stdio.h> 
#include <windows.h> 

int main() 
{ 
    SetConsoleOutputCP(1253); 
    char *ansichar_ = "Ιλιάδα"; 
    unsigned char lambda1253char = 'λ'; 
    printf("ansichar_: %s\n", ansichar_); 
    printf("λ %#x\n", lambda1253char); 
} 

결과 :

ansichar_: Ιλιάδα 
λ 0xeb 

UTF-16 인코딩 :

//Save As UTF16 (Unicode) 

    #include <stdio.h> 
    #include <io.h> 
    #include <fcntl.h> 
    #include <wchar.h> 

    int main() 
    { 
     _setmode(_fileno(stdout), _O_U16TEXT); 
     wchar_t *wchar_ = L"Ιλιάδα"; 
     wchar_t lambdaWchar = L'λ'; 
     wprintf(L"wchar_: %s\n", wchar_); 
     wprintf(L"λ %#x\n", lambdaWchar); 
    } 

결과 :

wchar_: Ιλιάδα 
λ 0x3bb 

UTF-8 인코딩 :

//Save As UTF8 without BOM signature 

    #include <stdio.h> 
    #include <windows.h> 

    int main() 
    { 
     SetConsoleOutputCP(65001); 
     char *utf8char_ = "Ιλιάδα"; 
     int lambdaUTF8char = 'λ'; 
     printf("utf8char_: %s\n", utf8char_); 
     printf("λ %#x\n", lambdaUTF8char); 
    } 

결과 : 루시다 콘솔 : 어떤 경우에

utf8char_: Ιλιάδα 
λ 0xcebb 

기본 콘솔 폰트 세트.

관련 문제