Qt 通过fopen打开中文的文件名

Qt 通过fopen打开中文的文件名

-----------------------------------------------------------------

参考:

windows _wfopen 和 linux wfopen,char 转 wchar_t
https://blog.csdn.net/qq_40015157/article/details/126667850

Linux上wfopen(打开宽字符版的文件名和模式)的实现
https://blog.csdn.net/zfk198687/article/details/7763400

linux c fopen utf8,fopen的文件名参数是否能够支持utf8编码?该如何解决
https://blog.csdn.net/weixin_39604897/article/details/116987753
fopen的文件名参数是否能够支持utf8编码?

现在有个utf8编码的字符串的文件路径,有没有办法通过编码转换以及locale的设置使得最后以const char*的形式传给fopen函数并正确打开?

因为字符串里可能有当前代码页不支持的字符,所以不能直接转

改_wfopen的话代码改动范围太大,有没有什么好一点的方法

=====================================

Qt 通过fopen打开中文的文件名

在做一个Qt项目的时候,完成上传文件时,通过fopen打开文件用来读时发现fopen不能打开中文的文件名,自己在网查找一下,解决方法如下

代码如下:

bool
UTF8ToUnicode(const char * UTF8, wchar_t * strUnicode)
{
    DWORD dwUnicodeLen;

    //转换后Unicode的长度
    TCHAR  *pwText;

    //保存Unicode的指针
    // wchar_t* strUnicode;    //返回值

    //获得转换后的长度,并分配内存
    dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);

    pwText =new TCHAR [dwUnicodeLen];
    if(!pwText)     
    {
        return false  ;
    }

    //转为Unicode
    MultiByteToWideChar(CP_UTF8,0, UTF8,-1, pwText,dwUnicodeLen);

    //转为CString
    wcscpy(strUnicode, pwText);

    //清除内存
    delete []pwText;
    return true ;
}

这个函数的用法如下:

wchar_t strUnicode[260];

UTF8ToUnicode(streamName, strUnicode);

FILE* fid = _wfopen(strUnicode, L"rb");

// FILE* fid = fopen(streamName, "rb");//此为原来的方法,遇到中文不能正确打开


————————————————
版权声明:本文为CSDN博主「guoqianqian5812」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/guoqianqian5812/article/details/45226695

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值