그건 바로 데이터가 잘못 되었기 때문입니다.
1. 웹에서 데이터를 가져와서 저장할 때가 문제인 경우
유니티에서 웹의 쿠키정보를 가져올때는 jslib을 이용해 자바스크립트를 이용합니다.
GetCookie: function(){
var cookies = document.cookie;
console.log("Cookies: " + cookies);
return allocate(intArrayFromString(cookies), ALLOC_NORMAL);
}
이렇게 코드를 보면 알 수있다시피 return값은 string입니다.
Dictionary<string, string> dataValue = new Dictionary<string, string>();
private void ParseCookies(string data)
{
string[] cookies = data.Split(';');
foreach (var cookie in cookies)
{
string[] keyValue = cookie.Trim().Split('=');
if (keyValue.Length == 2)
{
dataValue[keyValue[0].Trim()] = keyValue[1].Trim();
}
}
}
그래서 해당 자바스크립트를 통해 가져온 string 데이터를
그냥 위 코드처럼 유니티에 저장을 해주었습니다.
그냥 단순하고 간단한 코드였기에 넘겨갔지만,
이 데이터는 치명적인 문제가 있습니다.
바로 웹에서 가져온 데이터들이 URL인코딩을 거쳐 전달이 되는데,
인코딩된 문자들이 제대로 복원되지 않으면 문제가 생길 가능성이 있기때문입니다.
그게 뭐가 문제냐면
URL내에서
공백은 %20
/는 %2F
=는 %3D
&는 %26
와 같은 모양으로 변하게 됩니다.
그 외에도 여러가지가 있으며
이런 데이터를 그저 유니티에서 받아들이고 다시 웹으로 데이터를 보낼 경우
웹에서는 제대로 못받아들일 수 있습니다.
그래서 URL인코딩 / 디코딩 과정이 정말 중요하다는게 결론입니다.
private void ParseCookies(string cookieString)
{
string[] cookies = cookieString.Split(';'); // ';'로 쿠키 구분
foreach (var cookie in cookies)
{
string[] keyValue = cookie.Trim().Split('='); // key=value로 나누기
if (keyValue.Length == 2)
{
dataValue[keyValue[0].Trim()] = keyValue[1].Trim(); // Dictionary에 저장
}
}
var cookieArray = cookieString.Split(';');
foreach (var cookie in cookieArray)
{
string[] parts = cookie.Trim().Split('='); // key=value로 나누기
if (parts.Length == 2)
{
// key와 value에 대해 Trim하고 URL 디코딩 수행
string key = parts[0].Trim();
string value = HttpUtility.UrlDecode(parts[1].Trim());
}
}
}
변경된 코드는 다음과 같습니다.
2. 웹으로 데이터를 보낼 때가 문제인 경우
유니티에서 string은 UTF-16 인코딩 방식을 사용하고
JavaScript에서 string은 UTF-8 인코딩 방식을 사용합니다.
그래서 생각없이 유니티에서 자바스크립트 함수 호출하면서, 매개변수로 string을 보내고
자바스크립트에서는 해당 stirng을 그대로 웹에다가 보내버리면 또 이상한 문자열 하나가 가게됩니다.
그럴 땐 UTF8ToString() 함수를 사용하시면 됩니다.
console.log("hash:", hash);
그냥 콘솔에다가 매개변수로 받은 string 변수의 값을 찍을 경우
위의 값이 원본인데 상관없는 문자열이 찍혀있습니다.
console.log("hash:", UTF8ToString(hash));
콘솔에다가 매개변수로 받은 string 변수의 값을 UTF8ToString()을 이용해 찍을 경우
원본의 값과 동일한 값이 string으로 찍혀 나오게됩니다.
'ERROR > 오류덩어리들' 카테고리의 다른 글
[Unity] 오브젝트 transform 안먹히는 현상/ Combined mesh 로 인한 오브젝트 정적현상/ collider만 작동하는 현상 오류 해결 (0) | 2022.10.15 |
---|---|
[ERROR] 유니티 카메라 여러대일 경우, 특정 카메라 화면이 나오지않을때/ 카메라 오브젝트를 건드릴때만 활성화 될때 해결 (0) | 2022.09.22 |
[ERROR] 언리얼 Tick 무반응현상 (2) | 2022.08.29 |
[ERROR] 언리얼 instigator 접근오류 (0) | 2022.08.28 |
[ERROR] .exe .dll 올바른 Win32 애플리케이션이 아닙니다. (0) | 2022.08.21 |