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;
}
相关推荐
在路上看风景20 小时前
19. 成员初始化列表和初始化对象
c++
zmzb010320 小时前
C++课后习题训练记录Day98
开发语言·c++
念风零壹21 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
孞㐑¥1 天前
算法——BFS
开发语言·c++·经验分享·笔记·算法
_风华ts1 天前
创建并使用AimOffset
ue5·动画·虚幻·虚幻引擎·aimoffset
MZ_ZXD0011 天前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
A星空1231 天前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫1 天前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙1 天前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米6011 天前
C++顺序表和vector
开发语言·c++·算法