一.
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;
}