如何将 QString 转换为 LPCSTR ?
当#ifdef 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
其传递给您无法控制的另一个函数。该函数可能不会期望 UTF-8。如果它完全需要 Unicode,则需要一个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;