어떻게 QString을 LPCSTR로 변환 할 수 있습니까?QString을 LPCSTR (유니 코드)로 변환하는 방법
#ifdef UNICODE가 정의되어 있고 그렇지 않을 때 어떻게합니까?
정말 감사합니다 :)
어떻게 QString을 LPCSTR로 변환 할 수 있습니까?QString을 LPCSTR (유니 코드)로 변환하는 방법
#ifdef UNICODE가 정의되어 있고 그렇지 않을 때 어떻게합니까?
정말 감사합니다 :)
내가 추측 :
QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
QString
항상 유니 코드를 저장할 수 있습니다; LPCSTR
은 유니 코드가 아닙니다. 즉, 적합하지 않은 문자를 어떻게 처리해야하는지 고려해야합니다. 이것은 "사용할 수있는 방법"질문이 아니라 설계 질문입니다.
특정 경우에는 QString
로컬 "ANSI"코드 페이지 (또는 ACP
라고도 함)의 문자 만 사용할 수 있습니다. 이 경우 올바른 기능은 QString::toLocal8Bit()
입니다.
또는 QString
에는 Latin1 (ISO 8859-1)의 문자 만 포함될 수 있습니다. 이 경우 올바른 기능은 QString::toLatin1()
입니다.
QString::toUtf8()
으로 전화를 걸 수 있습니다. QString
에 모든 유니 코드 문자가 포함되어 있어도 항상 유효한 바이트 배열을 생성합니다. 그러나 형식적으로는 LPCSTR
을 가리킬 수 없습니다. UTF-8은 유효한 ACP
코드 페이지가 아닙니다. 아마도이 LPCSTR
을 컨트롤 외부의 다른 함수로 전달하기를 원할 것입니다. 함수가 UTF-8을 기대하지 않을 가능성이 있습니다. 유니 코드가 전혀 필요 없다면 LPCWSTR
이 걸릴 것입니다.
나는 here에서 다음과 같은 솔루션을 발견하고 나를 위해 완벽하게 작동합니다 :
void fooSub(LPSTSTR X); // this is our function :-)
foo()
{
QString text;
if(sizeof(TCHAR) == 1)
fooSub((LPCSTR)text.toLocal8Bit().constData()); // here you have to check, how to convert, you could also use utf8(), ...
else
fooSub((LPCWSTR)text.utf16());
}
그게 전부 LPCSTR 경우 const char * – snoofkin
'LPCSTR' 항상'char *'로 정의됩니다. 'UNICODE'가 정의되어 있는지에 따라'const char *'또는'const wchar_t * '에 매핑 할 수있는'LPCTSTR' (** T **에주의하십시오)과 혼동을 느낍니다. –