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;
}
相关推荐
fpcc7 小时前
c++编程实践—堆和栈越界调试
c++
weiabc8 小时前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++
灯澜忆梦9 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
aqiu11111111 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
chenbingjie_c11 小时前
C++ STL 适配器:stack & queue,从 vector/list 到 deque 深度解析
数据结构·c++
hetao173383715 小时前
2026-10-08 hetao1733837 的刷题记录
c++·算法
Frank_refuel15 小时前
【C++】智能指针
开发语言·c++
一只旭宝16 小时前
数据结构与算法复习手册:从写过,到讲清楚
开发语言·数据结构·c++·算法
十五年专注C++开发16 小时前
std::filesystem::exists 在有的win10系统抛异常原因分析
c++·文件系统·filesystem
hetao173383717 小时前
2026-10-07 hetao1733837 的刷题记录
c++·算法