C++ 如何以unicode编码格式获取QT主函数argv参数
我是QT新手,我在编码方面有问题。这是我的主要功能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和
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。@DanKornQApplication
用于这个问题的上下文,它是QT应用程序的核心部分。因此,构造适当的QApplication
实例非常关键,但使用wchar\t**
参数是不可能的。