3

如何将 QString 转换为 LPCSTR ?

当#ifdef UNICODE 被定义而没有被定义时,我该怎么做?

非常感谢 :)

4

4 回答 4

12

我猜:

QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
于 2011-03-26T16:11:31.750 回答
2

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.

于 2011-03-28T09:29:19.637 回答
0

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

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());
}
于 2013-03-18T18:06:12.033 回答
-6
LPCSTR == const char *

它不是unicode,那么

LPCSTR s = (const char *)qtString;

于 2011-03-26T16:08:43.477 回答