如何将QString转换为LPCSTR(Unicode)

我怎样才能将QString转换为LPCSTR?

当#ifdef UNICODE被定义时,我怎么做?

非常感谢 :)

Solutions Collecting From Web of "如何将QString转换为LPCSTR(Unicode)"

我猜:

QString str("ddddd"); LPCSTR lstr = str.toStdString().c_str(); 

QString始终可以保存Unicode; LPCSTR从来没有Unicode。 这意味着你必须考虑如何处理不适合的角色。 这不是一个“使用哪种方法”的问题,而是一个设计问题。

在您的具体情况中,您很可能知道QString只包含来自本地“ANSI”代码页(也称为ACP )的字符。 在这种情况下,正确的函数是QString::toLocal8Bit ()

或者,您可能知道QString只包含来自Latin1(ISO 8859-1)的字符。 在这种情况下,正确的函数是QString::toLatin1()

你可以尝试调用QString::toUtf8() 。 这将始终生成有效的字节数组,即使QString包含所有Unicode字符。 但是,正式的,你不能指向一个LPCSTR :UTF-8不是一个有效的ACP代码页。 大概你想让这个LPCSTR传递给另一个LPCSTR你控制的函数。 函数可能不会期望UTF-8。 如果它预期统一码,它将需要一个LPCWSTR

我从这里找到了以下的解决方案,它对我来说是完美无瑕的:

 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 * 

那么这不是unicode

LPCSTR s =(const char *)qtString;