약간의 측면 프로젝트를 위해서 나는 지역화 된 Windows 'CMD에서 텍스트의 문자열을 출력해야하며, 일부 문자열은 프로그램의 인수에서 읽혀집니다. 문제를 단순화하기 위해 간단한 에코 프로그램을 데모로 사용합니다.명령 줄의 로켈에 텍스트를 표시하는 방법은 무엇입니까?
C 언어로 니펫을 고려하십시오 :
#include <stdio.h>
int main(int argc, char **argv) {
// Display the first argument through the standard output:
if (argc > 1)
puts(argv[1]);
return 0;
}
이 두 실행의 출력은 다음과 같습니다
이$ test.exe Wilhelm
$ Wilhelm
$ test.exe Röntgen
$ R÷ntgen
당신이 ö
같은 일이 ASCII에서 될 것이라고 볼 이미 수는없는 것 올바르게 표시되어야합니다.
if (argv[1][1] == 'ö')
puts("It is.");
문장이 표시되는 프로그램이 제대로 문자를 받고, 그래서 : 당신이 그런 짓을하지만 그들은 제대로 예를 들어, 프로그램에 인식하고 있습니다. 그래서
그래도, OK, wchar_t
일이 필요 될 수 있으므로 적절한 변경하고 당신은 얻을 것 _UNICODE
UNICODE
정의 :
#include <stdio.h>
int wmain(int argc, wchar_t **argv) {
// Display the first argument through the standard output:
if (argc > 1)
_putws(argv[1]);
return 0;
}
아직도이 테스트 프로그램의 출력이 동일한 것 .
주위를 둘러보고 문서를 읽으면서 로케일을 예를 들어 영어로 설정하는 해결 방법을 발견했습니다. 그러면 텍스트가 올바르게 표시됩니다. 나는이와 함께 종료 (wchar_t
들없이) 첫 번째 버전을 수정 :
#include <stdio.h>
#include <locale.h>
int main(int argc, char **argv) {
// Get the previous locale and change to English:
char *old_locale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "English");
// Display the first argument through the standard output:
if (argc > 1)
puts(argv[1]);
// Restore locale:
setlocale(LC_ALL, old_locale);
return 0;
}
("en-US"
이는 MinGW-W64에서 작동하지 않는 동안 및 Microsoft Visual C++와 "English"
작품) 이제
프로그램은 문자가 실제로 명령 행 창에 올바르게 표시되도록 인쇄 할 수 있습니다.
문제는 영어로 설정하는 것이 스페인어 시스템이나 일본어로하는 것이 가장 좋은 방법이 아니라는 것입니다. 그래서 어떤 방식 으로든 시스템에서 로케일을 얻는 방법에 대해 생각했습니다. 나는 _locale_t
을 반환 _get_current_locale
라는 함수를 찾았지만 내가 전혀 원하는 것을 할 수 없습니다 같다 : (A char *
입니다)
_locale_t_variable->locinfo->lc_category[LC_ALL].locale
는 NULL
것 같다.
문제는 명령 줄의 로캘에서 텍스트를 가져 오거나 표시하는 방법입니다. Windows의 CMD에서 현지화 된 텍스트를 처리하는 올바른 방법은 무엇입니까 (반드시 유니 코드가 아님)?
귀하의 질문은 장점이있다. 'echo' 프로그램은 Win7 컴퓨터에서'Röntgen'을 정확하게 echo 할 수 있습니다; 그래서 당신이하려고하는 것은 분명히 가능합니다. –
그러나 다시,'echo'는 MS cmd 쉘 내부에 있습니다. 셸에서 '특수'처리를 할 수 있습니다. –
기본적으로 명령 프롬프트는 OEM 코드 페이지를 사용합니다. C 로켈 설정은 부적합합니다. 그러나이 코드 페이지는 변경할 수 있습니다. –