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;
}
相关推荐
blasit18 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_2 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星2 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛4 天前
delete又未完全delete
c++
端平入洛5 天前
auto有时不auto
c++
哇哈哈20216 天前
信号量和信号
linux·c++
多恩Stone6 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马6 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝6 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc6 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法