UE4中FString转char* ,控制台字符输出乱码(不是编译期乱码)
刚接触ue4,原本想着一个很简单的打印字符串,找找博客就没事了 ,但是找来找去 不是要什么安装字体,就是vs只安装英文,启用 utf-8bate版,我只是想简单输出下字符打印啊!!!
刚用libuv网络库所以需要从editor就是FString拿到字符转换成char* ,内存中的数值是正常的中英文字符都是正常传输的,但是一到log就不行,谁有时间去一步步调试看内存中是什么啊,找来找去我觉得应该是ue4打印函数不支持utf-8,或者是gbk
是这样测试的->
std::string tIp = TCHAR_TO_UTF8(*vIp);
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, tIp.c_str(), -1, NULL, 0);
wchar_t* pwBuf = new wchar_t[nwLen + 1];
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, tIp.c_str(), tIp.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char* pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
其中pBuf是转出来的utf8字符集,结果是无用
还是要自己去思考才行
过了一会自己研究出来了,直接上代码吧,有时候不能只靠百度编程啊
其中主要的两句字符转换
FString 转 char*
connect(TCHAR_TO_UTF8(*vIp), vPort);
char* 转 tchar 打印在屏幕或者控制台(原来打印在editor上的字符是要tchar类型)
UE_LOG(Connector, Log, TEXT("connect::(ip:%s),(port:%d)"), UTF8_TO_TCHAR(ip), port);
我觉得一开始就得知道ue4的自定义数据类型的熟练使用,不然怎么筑起高楼。