最近在利用IfcOpenShell来做BIM的相关工作,输出.ifc文件。
然后发现IfcOpenShell这个库貌似默认不支持中文路径。
检查了一下源代码发现是在使用wchar_t的时候有个参数给的不对。
然后就研究了一下使用wchar_t显示中文的方法,wchar_t本身是一种宽字长的字符类型,主要是用来显示那些字符在256位以上用char显示不了的字符。
使用方法:
#include <iostream>
#include <string>
#include<Windows.h>
using namespace std;
int main()
{
string filepath = "F:\\Onedrive - TSCN\\中文路径测试";
// CP_ACP CP_UTF8
int fn_buffer_size = MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), -1, 0, 0);
wchar_t* fn_wide = new wchar_t[fn_buffer_size];
MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), -1, fn_wide, fn_buffer_size);
wcout.imbue(std::locale("chs")); // 设置中文显示方式
wcout << fn_wide << endl;
}
这里使用的是MultiByteToWideChar这个函数将原始字符串转为宽字符,这里要注意第一个参数,默认的CP_UTF8是无法用来处理中文的,需要改成CP_ACP。
另外需要“wcout.imbue(std::locale("chs"));”来设置显示方式,然后就能通过wcout输出中文了。