C++中文路径解决方案(2023亲测有效)

  • Post author:
  • Post category:其他


中文路径使用有问题的原因:

使用ofstream在桌面创建一个中文名称的文本文件,例如“你好.txt”:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    char* x = wchar2char(L"C:\\users\\arcueidbrunestud\\desktop\\你好.txt");
    ofstream ofs(x);
    if (ofs.is_open()) printf("true\n");
    else printf("false\n");
    return 0;
}

运行的结果自然是true,可以创建中文名称的文本文件:

但是,在桌面上查看文本文件的时候,发现文件名称是乱码:


方法1:windows下,无需第三方库

使用头文件:

#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;

首先定义把wchar转char的函数:

char* wchar2char(const wchar_t* wchar)
{
    char* m_char;
    int len = WideCharToMultiByte(CP_ACP, 0, wchar, -1, NULL, 0, NULL, NULL);
    m_char = new char[len + 1];
    WideCharToMultiByte(CP_ACP, 0, wchar, -1, m_char, len, NULL, NULL);
    m_char[len] = '\0';
    return m_char;
}

进行读写包含中文路径的操作时,使用如下格式(

注意字符串前的L

):

int main(){  
    char* x = wchar2char(L"C:\\users\\arcueidbrunestud\\desktop\\你好.txt");
    ofstream ofs(x);
    if (ofs.is_open()) printf("true\n");
    else printf("false\n");
    return 0;
}

运行结果:


方法2:使用Qt

引入头文件:

#include <iostream>
#include <fstream>
#include <QtCore/qtextcodec.h>
using namespace std;

进行读写包含中文路径的操作时,使用如下格式(

注意字符串前的L

):

int main(){  
    QTextCodec* codec = QTextCodec::codecForName("gbk");
    string x = codec->fromUnicode(L"C:\\users\\arcueidbrunestud\\desktop\\你好.txt").toStdString();
    ofstream ofs(x);
    if (ofs.is_open()) printf("true\n");
    else printf("false\n");
    return 0;
}



版权声明:本文为m0_61800313原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。