x64 ArchLinux를 실행하는 QTCreator에 심각한 문제가 있습니다. 독일어 움라우트가 포함 된 명령 줄 매개 변수가 잘못되었습니다. std :: string으로 변환하고 싶습니다. 가능하면 적어도 이것에 대해 읽을 수 있습니다.독일어 움라우트에 대한 인코딩이 명령 줄 매개 변수
std::string arg(argv[1]);
// do something with arg
디버거를 사용하여 변수를 살펴보면 약간 이스케이프 된 문자열이 표시됩니다. 예를 들어, ä는 "= \"이됩니다. 그러나, 만약 내가
std::cout << arg << std::endl;
내 콘솔 (urxvt)에 변수가 완전히 정상입니다.
QtCreator의 편집기 설정 (이전에 접촉하지 않은) 을 확인하고 UTF-8을 사용합니다. 내가 코멘트에 일부 움라우트를 추가 후 UTF-8로 원본 파일을 변환
% iconv -f ascii -t utf-8 main.cpp > _main.cpp
% mv _main.cpp main.cpp
# qtcreator recognized the change and ask me to reload the file, what I did
% file -bi main.cpp
# then results text/x-c; charset=utf-8, was text/x-c; charset=us-ascii before
아무것도 일하지 실행. 심지어 움라우트를 포함하는 표준 : : 문자열을 정의 할 수 없습니다 :
std::string s("Mäx");
// the GDB debugger show 's' as: M=\x
가 그럼 난
DEFINES += UNICODE
# also without success
더욱를 신비화하기 위해 내 .PRO 파일 내에서 유니 코드를 정의, 다음과 같은 다른있다 효과 :
std::vector<std::string> list(argv, argv + argc);
# the debugger shows 2 elements (which is correct)
# but the element at index 1 looks like this: "Mäx"
전적으로 도움이 안됩니다. 어쩌면 누군가가 도울 수 있습니다. 감사
@Olaf : 2013
// lacks sanity checks but good enough for testing
std::wstring Encoding::char2Wide(const char *chars) {
setlocale(LC_ALL, "");
// get the length of the string to convert
int len = mbstowcs(NULL, chars, 0) + 1;
wchar_t* result = new wchar_t[len];
len = mbstowcs(result, chars, len);
std::wstring s(result);
return s;
}
2월 11일는
는조금을 명확히 은,이 그림은 표준의 문제 : 문자열
출력을 보여줍니다 콘솔은 문제가 아닙니다. 괜찮아.
if (s == "Mäx") std::cout << "Yeahhh" << endl;
-> Yeahhh (what the fxxx!)
어쩌면 이것은 단지 qtcreator 문제입니다 : 여기
% locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
하하 내 로케일 설정은 다음과 같습니다. 나는 Visual Studio로이 간단한 예제를 시도했으며 모두 예상대로 진행되었습니다. 그리고, 글쎄, 리눅스에서도 이클립스 CDT를 사용할 것으로 기대하고있다. GDB는 적절한 값을 보여줍니다. 나는 버그를 제기 할 것입니다.
UPDATE 정답 여기 https://stackoverflow.com/a/14801772/76591
보세요.
그를 필요로 할 때 [Dietmar Kühl] (http://stackoverflow.com/users/1120273/dietmar-kuhl) 어디 있습니까? 그는 콘솔 앱에 대한 입력으로 자신의 f'ing * 이름 *을 입력 할 때마다 이것을 경험합니다. = P – WhozCraig
사실 모든 것이 완벽하게 괜찮은 것처럼 들립니다. 올바른 값이 콘솔에 인쇄됩니다. 문제 해결됨. 디버거에서 볼 수있는 것은 UTF-8 바이트입니다. 그것은 예상된다. –
@KonradRudolph 왜 디버거에서 UTF-8 바이트를 볼 것으로 예상됩니까? 내 시스템에서는 문자열을'M.xx '나'M = \ x'가 아닌 gdb에'Mx'로 표시합니다. –