如何将QString转换为LPCSTR(Unicode)

时间:2011-03-26 16:01:25

标签: c++ windows qt qt4 lpcstr

如何将QString转换为LPCSTR?

如果定义了#ifdef UNICODE,那么我该怎么办?

非常感谢:)

4 个答案:

答案 0 :(得分:10)

我想:

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

答案 1 :(得分: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

答案 2 :(得分:0)

我从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());
}

答案 3 :(得分:-5)

LPCSTR == const char *

它不是unicode,然后

  

LPCSTR s =(const char *)qtString;