zoukankan      html  css  js  c++  java
  • 基于Visual Studio 2015 C++ Qt5读写中文路径和文件名的问题

    需求描述:使用Qt进行中文路径和中文文件名的读写是很方便的,特别是在Qt5之后,但有时因为某些原因不方便使用Qt实现,还是需要用C++完成,以下总结了两种方法。

    开发环境:win7/10;VS2010/2015;Qt4.8.6/5.7.1;CMake

    方法一:针对win7+VS2010+Qt4

    //用locale对象的name方法可以看到,通过locale("")构造出的locale 对象的name为"Chinese_People's Republic of China.936",
    //而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。
    //注意:如果使用locale loc = locale::global(locale(""))设置全局locale后没有用 locale::global(loc)恢复的话,
    //那么在程序后面的cout语句就不能输出中文了,虽然这时候操作中文文件没有问题,但是这也是很容易让人掉入陷阱的地方,应该值得注意。
    //因为使用QString,所以对于QT还需设置其编码格式:在main.cpp中有	QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    /*
    #include <locale>
    */
    
    QString INPUT_FILE_PATH = tr("./中文路径/中文文件名.txt");
    std::ifstream fp;
    
    std::locale::global(std::locale(""));
    
    fp.open( INPUT_FILE_PATH.toStdString().c_str(), std::ios::in );
    
    std::locale::global(std::locale("C"));
    
    if(!fp.is_open())
    {
    	return;
    }
    else
    {...}
    

     方法二:针对win10+VS2015+Qt5

    //在win10下,使用方法一失效,估计是win10语言环境与win7有区别:)
    //以下方法是利用filesystem在vs2015(c++14)中的部分实现,结合Qt的基本功能,实现fstream文件读写。
    
    /*
    #include <filesystem>
    */
    
    QString INPUT_FILE_PATH = "./中文路径/中文文件名.bin";
    std::ifstream fp;
    
    std::experimental::filesystem::path INPUT_FILE_PATH_U16STRING = INPUT_FILE_PATH.toStdU16String();
    
    fp.open( INPUT_FILE_PATH_U16STRING, std::ios::in | std::ios::binary );
    
    if(!fp.is_open())
    {
    	return;
    }
    else
    {...}
    
  • 相关阅读:
    微信小程序
    svn
    当滑动条滑动到某一位置触发js
    css固定页面
    css三级菜单
    h5时钟
    DOM节点
    应用r.js来优化你的前端
    浅谈javascript中的作用域
    javascript 中的 arguments,callee.caller,apply,call 区别
  • 原文地址:https://www.cnblogs.com/JoyPoint/p/14561802.html
Copyright © 2011-2022 走看看