繁体   English   中英

如何将QString转换为LPCSTR(Unicode)

[英]How to convert QString to LPCSTR (Unicode)

如何将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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM