[Error] 유니티를 통해 웹에서 가져온 데이터를 사용하는데 서버와 통신이 제대로 되지 않을 때

2025. 1. 25. 03:04·ERROR/오류덩어리들

그건 바로 데이터가 잘못 되었기 때문입니다. 

 

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
'ERROR/오류덩어리들' 카테고리의 다른 글
  • [Unity] 오브젝트 transform 안먹히는 현상/ Combined mesh 로 인한 오브젝트 정적현상/ collider만 작동하는 현상 오류 해결
  • [ERROR] 유니티 카메라 여러대일 경우, 특정 카메라 화면이 나오지않을때/ 카메라 오브젝트를 건드릴때만 활성화 될때 해결
  • [ERROR] 언리얼 Tick 무반응현상
  • [ERROR] 언리얼 instigator 접근오류
wise_
wise_
  • wise_
    WHY'S BlOG
    wise_
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • PROJECT (19)
        • 젯슨나노 프로젝트 (0)
        • 유니티 (9)
      • STUDY (37)
        • 코딩문제 (13)
        • 알고리즘 (0)
        • Effective C++ (14)
        • 유니티 (8)
        • 언리얼 (2)
      • ERROR (7)
        • 오류덩어리들 (7)
      • REVIEW (0)
      • LIFE (0)
        • 작고 소중한 내 일상 (0)
        • 작고 귀여운 내 취미 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    unity
    게임개발
    1인개발
    여우는오늘도친구를구한다
    퍼즐게임
    C++
    귀여운
    플로이드와샬
    백준
    알고리즘
    null
    스마일게이트
    언리얼
    윈터데브캠프
    코딩
    힐링게임
    깊이우선탐색
    error
    c#
    와이즌
    ==
    개발일지
    개발
    힐링
    게임
    인디게임
    모바일게임
    TheFoxSeeksFriend
    유니티
    wisen
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wise_
[Error] 유니티를 통해 웹에서 가져온 데이터를 사용하는데 서버와 통신이 제대로 되지 않을 때
상단으로

티스토리툴바