最近在利用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输出中文了。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐