UE4数据解析及其字符编码
字符编码变换
用TinyXml加载一个xml文档时,由于xml文档是UTF-8编码的,而UE4默认使用的是根据文档的编码方式来加载,在操作过程中需要进行编码转换
了解
ASCII码
使用1个byte,表示出英文中所有需要的字符(缺点:非英文的字符都无法表示)
UNICODE
是一个字符集,规定了不同的字符对应于一个唯一的整数,平时所说的使用UNICODE编码其实说的是UFT16编码(顾名思义就是用16位来表示一个字符,有65536个字符),UTF8、UTF16和UFT32则是基于UNICODE字符集的三种编码方式
TCHAR
TCHAR类型就是通过宏对char和wchar_t的封装,将其中的操作进行了统一。可根据当前平台情况选择对应的类型。_T修饰的字符串常量同理,根据是否定义的UNICODE宏,分别表示"“或L”"
转换
char 转 TCHAR
TCHAR* outTchar = new TCHAR[iLength + 1];
const char *outTchar1 = displayNameNode->GetText();
MultiByteToWideChar(CP_UTF8, 0, outTchar1, strlen(outTchar1) + 1, outTchar, iLength);
TCHAR转char
int32 iLength = WideCharToMultiByte(CP_UTF8, 0, *_XmlPath, -1, NULL, 0, NULL, NULL);
char* path = new char[iLength + 1];
WideCharToMultiByte(CP_UTF8, 0, *_XmlPath, -1, path, iLength, NULL, NULL);
注意:使用wideChartoMultiByte函数时,需要包含stringappiset.h头文件,而使用此头文件有需要包含windows.h头文件
而在UE4中有一个封装好的宏用于char与TCHAR的转换
TCHAR_TO_ANSI - 将引擎字符串(TCHAR*)转换为 ANSI 字符串。
ANSI_TO_TCHAR - 将 ANSI 字符串转换为引擎字符串(TCHAR*)。
注意:这些宏声明的对象的生命周期非常短。它们将被用作函数的参数。无法将一个变量指定到转换后的字符串内容,因为对象将处于作用域之外,字符串将被释放。
传入的参数必须是一个固有字符串,因为参数被类型转换为指针。如传入的是 TCHAR 而非 TCHAR*,编译后运行时将出现崩溃。
用法:
SomeApi(TCHAR_TO_ANSI(SomeUnicodeString));
UTF8_TO_TCHAR(outTchar)
注意:
这个宏的声明周期很短所以需要调用完直接赋值
FString转为TCHAR *(TCHAR与FString基本都能自动隐式转换)
Const FString SceneName;
const TCHAR *hc = *SceneName;
1. 解析json文件
1.1 json数据格式
{
{
“Cultrue": "ZH"
},
{
"MusicVolume: 0.3
},
{
"SoundVolume": 0.3
},
{
"ReCordData": [
{
"0": "Defaule"
},
{
"1": "Default"
}
]
}
}
解析Json数据示例
// 包含Include"Json.h"
void SlAiJsonHandle::Reco