Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何以unicode编码格式获取QT主函数argv参数_C++_Qt_Unicode_Utf 8 - Fatal编程技术网

C++ 如何以unicode编码格式获取QT主函数argv参数

C++ 如何以unicode编码格式获取QT主函数argv参数,c++,qt,unicode,utf-8,C++,Qt,Unicode,Utf 8,我是QT新手,我在编码方面有问题。这是我的主要功能 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; const char *charArray = "çşüğ"; QStrıng str1(charArray); QString str2(argv[1]); } argv[1]值与调用方exe端的charArray相同。但是,如果我控制str1和

我是QT新手,我在编码方面有问题。这是我的主要功能

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    const char *charArray = "çşüğ";

    QStrıng str1(charArray);
    QString str2(argv[1]);
}

argv[1]
值与调用方exe端的
charArray
相同。但是,如果我控制
str1
str2
值,那么
str1
看起来像çşüğ,但
str2
ıs.!?> 将第一行更改为:

int wmain(int argc, wchar_t *argv[])

然后调用。

例如,使用
QCoreApplication::arguments

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    if (argc > 1)
    {
        QString str1 = "çşüğ";
        QString str2 = a.arguments().at(1);
    }
    return a.exec();
}
请注意,在Windows环境中,Unicode指的是UTF-16标准,您需要宽字符字符串,例如
const wchar__t*charArray=L“çşüğ”在基于Unix的环境中,Unicode指的是UTF-8


Qt应该是跨平台兼容的,因此它试图通过
QString
和其他函数来隐藏这些差异。

看起来像是在字符串文本中使用非ASCII字符的复制品,这不是标准功能,因此,您无法确定在
charArray
中到底有哪些字节。这实际上与C无关,尽管这些信息让我们知道这是特定于Windows平台的(尽管应该在问题或标记中明确指定).
GetCommandLineW
将以Unicode格式返回程序参数,无论您是使用
main
还是
wmain
还是
WinMain
。是的,我想我应该说“或调用GetCommandLineW”。@DanKorn这里不可能使用
wmain
。类没有带
wchar\u t**
参数的构造函数。@Nikita:这两个语句没有因果关系。确实,QApplication没有接受wchar\u t**的构造函数。但这并不意味着不能使用wmain。@DanKorn
QApplication
用于这个问题的上下文,它是QT应用程序的核心部分。因此,构造适当的
QApplication
实例非常关键,但使用
wchar\t**
参数是不可能的。