백엔드는 php코드와 apache서버를 이용하였으며

Mingw를 사용해서 전달 받은 코드를 컴파일한다.

 

 

 

 

 

 

'잡동사니' 카테고리의 다른 글

2018/12/01 졸업작품 영상  (0) 2018.12.01
2018/12/01 졸업작품 Doxygen  (0) 2018.12.01
다이렉트x 과제  (0) 2018.06.24
마지막 팀프  (0) 2018.06.24
팀프3  (0) 2018.06.24

환경

서버 : c++

클라 : 유니티

마샬링이 아닌 바이트스트림으로 Serialize 통신

 

 

채팅기능을 구현하여 클라이언트간 한글 통신을 하게 하려고 할때

 

클라이언트에서 Encoding.UTF8.GetBytes(str) 이와같은 형태로 Byte를 얻어 c++ 서버로 보내는 형식을 취했었는데

 

유니티에서 UTF8 로 Encoding시 "안녕" 이라는 문자열이 6개의 바이트로 표현되는 것으로 나타났다.

 

즉 한글 한 문자당 3바이트를 차지한다는 것이다. (지금까지 2바이트로 알고 있었는데 말이죠..)

 

찾아보니 

(1) 보통의 한국어 텍스트 문서: 이것은 아스키 문서이며 유니코드가 아닙니다. 영문/숫자/기호는 1바이트. 한글과 한자는 2바이트로 표현됩니다. euc-kr 또는 ksc_c_5601-1987 로 불리는 인코딩이며 웹페이지 작성에 사용할 수 있습니다. 특수한 외국어 문자나 일본식/중국식 한자는 표현할 수 없습니다.

다음의 2개가 유니코드입니다:

(2) 일반 유니코드(Unicode): 모든 글자를 2바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 인터넷에 HTML 파일로 올릴 수 없습니다. 즉 웹페이지 작성에 쓸 수 없습니다.

(3) UTF-8 유니코드: 영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 웹페이지 작성에 쓸 수 있습니다. (저의 mwultong.blogspot.com 이 블로그도 UTF-8 로 되어 있습니다)

http://mwultong.blogspot.com/2006/05/unicode-utf-8.html 

 

일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점, 차이

 

mwultong.blogspot.com

 

라고 설명되어 있었다. 즉 c++ 에서 받은 나는 일반 유니코드이므로 2바이트로 한글을 읽고 유니티에서는 3바이트로

한글을 읽으니 유니티에서 보낸 문자열이 제대로 표현이 되지않았다.

 

그럼 유니티에서 보낼때 제대로 보내면 되지않는가? ==> 제대로 서버에서도 제대로 받는 함수로는Encoding.Default.GetBytes(str) 가 있었는데 분명 잘 되던게 빌드파일로 돌릴때는 한글이 다시 3바이트로 표현돼서 들어왔다.

 

그런데 사실 내 서버에서는 굳이 채팅 문자열을 콘솔창에 찍어서 보아도 관련 기능이 딱히 없어서 그냥 받는 3바이트 그대로 다시 다른 클라이언트에 넘겨 줌으로써 다른 클라이언트들에게 한글문자열을 보여주게 했다..

 

https://trowind.tistory.com/61 이쪽에서는 만약 UTF-8 로 변환해서 보고 싶으면 도와주는 것을 설명하고 있다.

'유니티' 카테고리의 다른 글

중간 발표, 피드백  (0) 2018.05.29
게임 내 출석부 구현  (0) 2018.05.27
UI OnOff Sprite Change  (0) 2018.05.27
UI : Canvas VS CameraScreen  (0) 2018.05.27

+ Recent posts