Local8bit 和 Utf-8 的区别

174 阅读1分钟

今天在用Qt读取一个文件时,发现路径转为std::string时出现了乱码。

网上查找说使用utf-8 就行,但是我在测试时并没有效果。后来发现local8bit是可以的,那么这两个有什么区别呢?

效果: image.png

源码:

qDebug()<<"filePath: "<<filePath<<"\n";
qDebug()<<"filePath local8bit : "<<filePath.toLocal8Bit().toStdString()<<"\n";
qDebug()<<"filePath utf8 : "<<filePath.toUtf8().toStdString()<<"\n";
std::cout<<"image path local8bit : "<<filePath.toLocal8Bit().toStdString()<<"\n";
std::cout<<"image path utf8 : "<<filePath.toUtf8().toStdString()<<"\n";

image.png

通义千问是这样回答的,如果按照回答,那toUtf8()应该是更安全的选择。

难道QString读到的不是UTF-8?

image.png

但是这样看也确实是UTF-8。

奇怪......

后面为了排除问题,重命名了文件,再读取,结果发现现在可以读取了。

image.png

那看来应该是外部下载文件的问题。

那如果遇上这种问题该怎么办呢?还是使用local8bit更安全一点?