개발하는 두더지

[문자열/Unicode] Unicode , UTF-16 , UTF-8, UTF-32 본문

이것저것

[문자열/Unicode] Unicode , UTF-16 , UTF-8, UTF-32

덜지 2016. 7. 22. 03:23

# 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 프레임워크과 상호 운용이 쉽다.

Comments