기존 문자열 인코딩 방식
기존 문자열 인코딩 방식은 아래와 같다
Single-Byte: ANSI, ASCII, …
Multi-Byte: EUC-KR, CP949, …
Unicode: UTF-8, UTF-16, …
언리얼의 문자열 인코딩 방식
언리얼은 내부적으로 UTF-16 방식을 채택했다
파일을 읽을 때도 UTF-16 방식을 기본으로 읽는다
단, 소스코드에 한글이 꼭 필요한 경우에는
파일의 인코딩을 UTF-8로 변환해야 한다
TEXT() 매크로
TEXT() 매크로를 통해 문자열을 작성하면
자동으로 언리얼에서 UTF-16을 위한 문자열로 변환해 준다
TCHAR vs. FString
UE_LOG(LogTemp, Log, TEXT("헬로, 언리얼!"));
// File > Save as ... > Save 버튼 우측 역삼각형 클릭
// > Save with Encoding > Encoding에 UTF-8로 지정
// 한글의 경우는 반드시 UTF-8로 변환해야
// Output log에 한글이 제대로 출력된다
TCHAR ArrayOfTChar[] = TEXT("Hello, Unreal!");
// UTF-16 인코딩의 문자열을 저장하기 위한 언리얼 표준 문자 자료형이 TCHAR
// TCHAR 문자열을 생성하기 위해 TEXT() 매크로를 활용했다
FString String0 = ArrayOfTChar;
// 문자열을 좀 더 자유롭게 조작하고 싶다면
// TCHAR 배열 대신 FString 자료형을 사용하면 된다
// TCHAR 배열을 Wrapping한 헬퍼 클래스가 FString이다
FString String1 = FString(TEXT("Hello, Unreal!"));
// 바로 선언을 하고 싶다면 위와같이 가능하다
UE_LOG(LogTemp, Log, TEXT("String1: %s"), *String1);
// FString에 Asterisk(*)를 붙혀줘야 TCHAR 배열이 반환된다
const TCHAR* PtrToTChar = *String1;// const TCHAR* 형으로
TCHAR* RawPtrToTChar = String1.GetCharArray().GetData();// TCHAR* 형으로
FString 기능
// FString에 해당하는 문자가 있는 지 확인하는 경우
// ESearchCase::IgnoreCase는 대소문자 구분하지 않음을 의미
if (String1.Contains(TEXT("unreal"), ESearchCase::IgnoreCase) == true)
{
int32 Index = String1.Find(TEXT("unreal"), ESearchCase::IgnoreCase);
FString FoundedString = String1.Mid(Index);
// "unreal" 문자열이 시작되는 곳에서부터 끝까지 자른다
UE_LOG(LogTemp, Log, TEXT("Founded string: %s"), *FoundedString);
}
숫자와 문자의 변환
int32 IntValue = 7;
float FloatValue = 3.141592f;
// FString::Printf로 숫자 출력
FString StringWithNumbers = FString::Printf(TEXT("int32: %d and float: %f"), IntValue, FloatValue);
UE_LOG(LogTemp, Log, TEXT("StringWithNumber: %s"), *StringWithNumbers);
// FString::FromInt로 숫자를 문자열로 변환
FString IntString = FString::FromInt(IntValue);
UE_LOG(LogTemp, Log, TEXT("IntString: %s"), *IntString);
// FString::SanitizeFloat로 복잡한 float 자료형의 표준을 정돈해서 문자열로 변환
FString FloatString = FString::SanitizeFloat(FloatValue);
UE_LOG(LogTemp, Log, TEXT("FloatString: %s"), *FloatString);
// C 문자열 라이브러리 함수(atoi(), strcpy(), ...)를 제공하는 클래스 FCString
// 권장되지 않는다
int32 IntValueFromString = FCString::Atoi(*IntString);
UE_LOG(LogTemp, Log, TEXT("IntValueFromString: %d"), IntValueFromString);
float FloatValueFromString = FCString::Atof(*FloatString);
UE_LOG(LogTemp, Log, TEXT("FloatValueFromString: %f"), FloatValueFromString);
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 자료구조 - TArray, TSet, TMap (0) | 2024.05.10 |
---|---|
언리얼 문자열 - FName, FText (0) | 2024.05.10 |
언리얼 오브젝트 기능 - 델리게이트 (0) | 2024.05.10 |
언리얼 오브젝트 기능 - Serialization (0) | 2024.05.10 |
언리얼 오브젝트 기능 - Smart Pointer (0) | 2024.05.09 |