我的程序是在Linux系统下开发,在嵌入式linux系统运行,要读一个文件,并显示其中的文字
代码
在主函数里是这样设置的:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
获取文件并显示的函数:
bool MenuManager::getAdText(QString fileName)
{
bool ret = false;
QFile file(fileName);
if(file.open(QIODevice::ReadOnly | QIODevice::Text) == true)
{
QTextCodec *m_codec = QTextCodec::codecForName("GB18030");
#if 1
QTextStream in(&file);
in.setCodec(m_codec); //进行从GB18030到utf8的转换
m_adText = in.readLine();
#else
QTextStream in(&file); //不进行转换,直接显示
m_adText = in.readLine();
#endif
ret = true;
}
else
{
ret = false;
}
file.close();
qDebug()<<"MenuManager::getAdText adtext==="<<m_adText;
return ret;
}
现在的问题是:
1.如果我读取的是linux本地utf8文件的话,那么不转换的话可以直接显示中文,进行转换的话显示的就是乱码
2..如果我读取的是windows记事本文件的话,那么不转换显示的是乱码,进行转换的话可以正常显示中文
那么问题就是我不知道程序要读取的文件时utf8编码的还是gbk编码的,因为从服务器传来的文件我也不知道是什么编码的
所以请问大家,有什么方法可以自适应文件编码吗?
qt有判断文件是什么编码的方法吗?或者不是qt自带的也行。
如果有的utf8文件没有前三个字节的标示又该怎样判断吗?
非常感谢大家。