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;
}
相关推荐
elseif1232 分钟前
【双指针/二分】P1102 A-B 数对
c++·算法·二分·双指针
雪落漂泊6 分钟前
C++智能指针
开发语言·jvm·c++
bnmoel43 分钟前
C++ 基础入门篇(二):引用
开发语言·c++·引用·底层
richard_yuu1 小时前
AOI 实战第六篇:.onnx 到 C++ 的最后一公里
c++·深度学习·yolo
wuminyu1 小时前
Kafka配置TLS/SSL加密传输时零拷贝失效分析
java·linux·c语言·jvm·c++
影视飓风TIM1 小时前
C++ 智能指针:auto_ptr / unique_ptr / shared_ptr / weak_ptr 原理与使用
开发语言·c++
一木 之林1 小时前
李沐《动手学深度学习》知识卡合集:从 Softmax 回归到房价实战(第24-50集)
开发语言·c++·人工智能
keyipatience2 小时前
5种IO模型与阻塞IO,select,poll,epoll,LT和ET模式
linux·服务器·网络·数据结构·c++·算法
汉克老师2 小时前
CSP-J 初赛(以满分为目标):第三十八课《数学与逻辑①——排列还是组合?先搞清楚“选”与“排”》
c++·csp-j·小学生·学c++编程
qeen872 小时前
【C++】智能指针介绍
开发语言·c++·笔记·指针