[문자열/Unicode] Unicode , UTF-16 , UTF-8, UTF-32
# UTF-16
각 문자를 2바이트
WCHAR / wchar_t
Windows 계열에서는 utf-16 2byte로 표현되는데
UNIX 계열에서는 utf-32 4byte로 표현됩니다.
윈도우에서 WCHAR를 안드로이드로 보내서 작업할 일이 생겼는데
byte 크기때문에 그냥 전송하면 문제가 생깁니다.
그리고 자바는 string을 유니코드로 저장합니다. 하지만 데이터를 직렬화를 하거나 네이티브 코드를 사용할 때는
utf-8로 변경하여 전송합니다.
즉 네이티브 코드를 사용할 때 Java의 string -> JNI jstring 로 넘겨서 사용할 때 잘 확인해야 합니다.
jstring -> char 1byte (utf-8)
jstring -> jchar 2byte (utf-16)
2byte라 C에서 사용한 2byte WCHAR를 그대로 쓰면 안됩니다.
wchar_t는 안드로이드 2.1 이하에서는 2byte였는데 2.1 이상부터 4byte/ UTF32로 표현됩니다.
# UTF-8
0x0080 미만 : 1바이트 ( 영어 )
0x0080 ~ 0x07FF : 2바이트 ( 유럽, 중동 )
0x0800 이상 : 3바이트 ( 동아시아 )
# UTF-32
모든 문자 4바이트 사용
메모리 사용이 비효율적이라 네트워크 전송 방식으로 사용 안함.
프로그램 내부에서만 사용
# 유니코드를 왜 사용해야 하는가?
모든 언어를 지원할 수 있다.
코드가 더 빠르게 수행되며 더 작은 메모리를 사용
윈도우가 제공하는 모든 함수를 쉽게 사용할 수 있다.
COM과 .NET 프레임워크과 상호 운용이 쉽다.