일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- C/C++
- 코틀린
- Java
- Android P
- Django REST Android
- livedata
- Python
- UWP
- android architecture component
- flutter firestore
- Flutter TextField
- NDK
- Android
- Django REST framework
- Django REST
- 안드로이드 구글맵
- android push
- FLUTTER
- RxJava
- dart
- RxAndroid
- kodility
- Rxjava2
- 안드로이드
- mfc
- 프로그래머스
- Kotlin
- C++
- C
- Today
- Total
개발하는 두더지
[문자열/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 프레임워크과 상호 운용이 쉽다.
'이것저것' 카테고리의 다른 글
다모여커뮤니티 개인정보처리방침 (0) | 2016.07.22 |
---|---|
[운영체제/커널] 커널 오브젝트 (0) | 2016.07.22 |
[Windows/윈도우즈] Custom URL Schemes ( Protocol Handler ) 레지스트리 등록 방법 (0) | 2016.07.22 |
[하드웨어] SSD 동작방식 요약 (0) | 2016.07.22 |
[Windows/윈도우즈] Windows 제품키입력 건너뛰기 (0) | 2016.07.22 |