您现在的位置是:首页 > 正文

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

2024-04-01 00:24:08阅读 1

测试条件:
文件名包含部分中文或韩语文字,测试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

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

网站文章

  • JavaSE学习:第九章、封装

    1、封装的概念: 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。 2、好处: (1)只能通过规定的方法访问数据 (2)隐藏类的实例细节,方便修改和实现。 3、封装的实现步骤 1、将属性进行私有化private。 2、提供公共(public)的get、set方法,用来获取修改属性值 3、在set、get方法中,可以加入属性控制语句。 ...

    2024-04-01 00:24:01
  • 云服务器 ipv6,开通IPv6

    云服务器 ipv6,开通IPv6

    操作说明在支持IPv6的数据中心,创建云服务器可同步开通IPv6,已存在的云服务器也可进行IPv6开通(需要云服务器所在VPC及子网先开通IPv6网段)。云服务器开通IPv6后,IPv6地址直接配置在...

    2024-04-01 00:23:53
  • git 客户端使用

    1、TortoiseGit记住密码 在settings->git->Edit local .git/config,加上下面的内容,就能记住密码了。[credential] helper = store

    2024-04-01 00:23:45
  • Animal recognition with Baidu API

    Animal recognition with Baidu API

    调用百度API识别动植物

    2024-04-01 00:23:17
  • Nunit 2.6 无法调试.Net Framework 4.0

    好久没有写单元测试了,拿出来一个原来的单元测试在跑,突然发现断点加载不上了,查了一下,说是要修改nunit.exe.config[html] view plaincopyprint?configuration>       The GUI only runs under .NET 2.0 or higher. The     us

    2024-04-01 00:23:10
  • Linux 文件/目录访问(opendir/closedir/readdir)

    在Linux系统中我们需要在一个特定目录下对该目录下所有的文件以及目录(文件夹)进行便利访问。Linux获取目录文件的流程如下:1.打开指定目录,使用opendir得到目录句柄。2.while循环中使...

    2024-04-01 00:22:45
  • lvm卷删除故障记录

    故障描述: 在centos7中,用lvremove,vgremove,pvremove删除lvm卷后,格式化分区重新挂载出现故障 Unit xxx.mount is bound to inactive unit dev-mapper-centos\x2dxxx 解决办法: systemctl daemon-reload ...

    2024-04-01 00:22:38
  • wireshark收到的报文长度没问题,但是程序报错

    wireshark收到的报文长度没问题,但是程序报错

    原因:实际收到的报文长度没问题,但是三级发的报文中定义的长度有问题。

    2024-04-01 00:22:32
  • 属性的类型和大小写都不一致的两个类之间属性赋值

    属性的类型和大小写都不一致的两个类之间属性赋值

    2024-04-01 00:22:06
  • PyTorch中的两类乘法 最新发布

    PyTorch中的两类乘法

    2024-04-01 00:21:59