UE C++ 字符串编码转码

一.

Unicode 是一种全球统一的编码标准,它将各个语言的字符映射为二进制

1.从ANSI , Unicode(二进制),TCHAR(UE) 三个互相转换

这个是老版本的转换,再转换回去。当字符很多时就会出问题。并且传入其他函数时,由于生命周期过短会有问题,不建议这么做。

cpp 复制代码
void AWXStringActor::TransformFromString()
{
	FString Test = TEXT("234fdscfz");
	std::string a = TCHAR_TO_ANSI(*Test);
	char* b = TCHAR_TO_ANSI(*Test);
	//TCHAR_TO_UTF8(Test);

	//FString testa = ANSI_TO_TCHAR(a);
	FString testb = ANSI_TO_TCHAR(b);
	
	FString Test2 = TEXT("1235547667上面");
	char* c = TCHAR_TO_UTF8(*Test2);
	FString testc = UTF8_TO_TCHAR(c);

	FString Test4 = TEXT("234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D 234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D");
	std::string d = TCHAR_TO_ANSI(*Test4);
	char* dd = TCHAR_TO_ANSI(*Test4);
	FString testd = ANSI_TO_TCHAR(dd);

	WrongUSE(dd);

	int duan = 32;

}
void AWXStringActor::WrongUSE(char* InStr)
{

}

这里UE使用了新的方案。这两个方案相对稳定,在UE内部也有使用

1.FTCHARToUTF8 传入 FString的指针,再从UTF8转换为TCHAR。

2.StringCast是最新的,将TCHAR 转换为 UTF8,再转回TCHAR。

都是用<uint8>的TArray来装,和用来转换。

cpp 复制代码
void AWXStringActor::TransformFromStringRight()
{
	FString StringLong = TEXT("234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D 234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D234fdscfzdffffffffffffffffffffffffcwefwedvgzv ffbvfbfb fzb /sdfcpoKODV[,[D");
	//std::string d = TCHAR_TO_ANSI(*Test4);
	//char* longStr = FTCHARToUTF8(StringLong);
	
	//1
	FTCHARToUTF8 Convert(*StringLong);
	//用unit8来装
	TArray<uint8> Data;
	Data.Append((uint8*)Convert.Get(), Convert.Length());  //把Conver的再取出来,UTF8的转成功。

	FUTF8ToTCHAR BackConvert((const ANSICHAR*)Data.GetData(), Data.Num());

	//2
	auto UFT8String = StringCast<UTF8CHAR>(*StringLong);
	//用unit8来装
	TArray<uint8> NewMethModeData;
	NewMethModeData.SetNum(UFT8String.Length());
	FMemory::Memcpy(NewMethModeData.GetData(), UFT8String.Get(), UFT8String.Length());

	auto Cnv = StringCast<TCHAR>((const ANSICHAR*)NewMethModeData.GetData());

	FString FinalStr(Cnv.Get(),Cnv.Length());
	int32 a = 1;
}
相关推荐
William_wL_14 分钟前
【C++】priority_queue(优先级队列)的使用和实现
c++
代码中介商15 分钟前
C++ STL入门:vector与字符串流详解
开发语言·c++
fqbqrr16 分钟前
2605C++,C++类的继承1
c++
王老师青少年编程20 分钟前
csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:[NOIP 1998 提高组] 拼数
c++·字符串·csp·高频考点·信奥赛·拼数·字符串排序
草莓熊Lotso22 分钟前
【Linux网络】从 0 到 1 实现高性能 UDP 聊天室:深入拆解 Linux 网络编程与线程池架构
linux·运维·服务器·网络·数据库·c++·udp
basketball61624 分钟前
C++ iomanip 常用函数
开发语言·c++
sanqima32 分钟前
C++里strcpy()拷贝的3种写法
c++·字符串拷贝
艾莉丝努力练剑33 分钟前
【Linux网络】Linux 网络编程:应用层自定义协议与序列化(2)序列化与反序列化
linux·运维·服务器·c++·网络协议·序列化
智者知已应修善业34 分钟前
【51单片机一个按键切合初始流水灯按一下对半闪烁按一下显示时间】2023-10-16
c++·经验分享·笔记·算法·51单片机
雪度娃娃1 小时前
结构型设计模式——外观模式
c++·设计模式·外观模式