fopen打开文件名(文件路径含中文或韩语)方法测试

测试条件:
文件名包含部分中文或韩语文字,测试fopen打开

测试场景1
代码段:
   QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    SetFileApisToOEM();

    FILE* fp = fopen(name.toLocal8Bit().data(), "r");
    qDebug("data printf %s, %s,%s", name.toUtf8().data(),name.toLatin1().data(),name.toLocal8Bit().data());
 
打印的内容:
data printf I:/work/안녕하세요/123.txt, I:/work/?????/123.txt,I:/work/안녕하세요/123.txt
open fail errno = 42 reason = Illegal byte sequence 

结论:
fopen不支持utf-8

测试场景2

代码段:
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    SetFileApisToANSI();

    FILE* fp = fopen(name.toLocal8Bit().data(), "r");
    qDebug("data printf %s, %s,%s", name.toUtf8().data(),name.toLatin1().data(),name.toLocal8Bit().data());
打印的内容:
data printf I:/work/你好/123.txt, I:/work/??/123.txt,I:/work/����/123.txt
open file ok

data printf I:/work/안녕하세요/123.txt, I:/work/?????/123.txt,I:/work//123.txt
open fail errno = 2 reason = No such file or directory 

现象:支持中文打开,韩语不支持
结论:部分中文支持GBK编码,所以能打开

正确的打开方式:
FILE *fp = _wfopen(name.toStdWString().c_str(),L"r");
测试中文、韩语打开都支持

参考文章(或链接):
fopen, _wfopen
https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/fopen-wfopen?view=msvc-170
文件名中使用的字符集
https://docs.microsoft.com/en-us/windows/win32/intl/character-sets-used-in-file-names
SetFileApisToOEM function
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-setfileapistooem

以上测试基于修改系统区域至朝鲜语环境下测试,文章仅代表个人观点,如有错误欢迎留言评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值