유니코드라는게 0x12345678 이렇게 최대 4바이트임. 그래서 ucs4 라고 하는건 유니코드가 1대1로 대응되는 거임. uint32_t 임. ucs2 는 2바이트로 표현할 수 있는 유니코드고 그건 uint16_t 로 하면 되겠지. MS윈도에서는 어떤 인코딩 쓰나? MS윈도 GUI 툴킷에서 주력으로 사용하는 유니코드 인코딩으로 바꿔주면 됨.(리눅스 GTK 툴킷은 주력 인코딩이 utf-8 임.)
익명(218.147)2020-04-22 01:03
답글
WINAPI 을 써야한다면 우야함?
노이ㄴ(liliilli)2020-04-22 01:06
답글
위나피가 뭐임? 먹는거임?
익명(218.147)2020-04-22 01:06
답글
아니 윈도우 API (WIN32)의, UCS-2 대응되는 함수의 문자열 인자가 다들 wchar_t 로 받는데, 그렇다고 char_t로 인자 받는 멀티바이트 함수를 쓰면 제약이 있어서 (CHAR_MAX 등등) 울며 겨자먹기로 UCS-2 대응 wchar_t 로 넘겨 써야한단 말이야...
노이ㄴ(liliilli)2020-04-22 01:14
답글
winapi를 쓰는데 리눅스 호환을 왜 고려하는것?
석린이(115.136)2020-04-22 01:25
답글
MS윈도 프로그래밍은 왜이리 개떡같냐. scanf_s 함수같은 건 POSIX 준수도 안하고. MS윈도 프로그래밍 안 해본지 20년 넘어서 모르겠당. 헝가리안 표기법 배우기도 싫고. MS회사는 위나피로 똥꼬나 닦으면서 똥꼬 확 찢어져라 ㅋㅋㅋ
익명(218.147)2020-04-22 01:26
답글
MS윈도 프로그래밍하는 사람한테 물어보던가 MS API 검색해보면서 해법 찾아야할 거임. 아니면 리눅스 GTK GDK에 MS윈도 백엔드 있으니까... 그 코드 보고 힌트 얻던가. LGPL 라이선스라 좀 거시기한데, 동일 내용을 MS API 에서 찾아서 MS 문서 보고 코딩하면 MS외에는 라이선스 문제로 아무도 시비 못 검.
익명(218.147)2020-04-22 01:29
답글
석린이 // 윈도우에서는 winapi 을 쓰고, 리눅스에서는 posix 함수를 쓰고. 인터페이스는 extern 함수나 추상 클래스로 만들어서 통일해서 쓰게끔 할려고...
노이ㄴ(liliilli)2020-04-22 08:17
답글
궁금해서 결국 gtk 소스코드를 봤음. wchar_t *wtitle 에 UTF-16 을 저장함.
wchar_t *wtitle;
wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL);
API_CALL (SetWindowTextW, (GDK_WINDOW_HWND (window), wtitle));
MS API 문서를 보니 LPCWSTR 이 wchar_t * 에 대응되나봄.
BOOL SetWindowTextW(
HWND hWnd,
LPCWSTR lpString
);
익명(218.147)2020-04-22 17:54
char16_t를 안 쓰는 이유가 있나요
익명(223.62)2020-04-22 12:21
답글
wchar_t 대용으로 char16_t 을 쓸라카면 애초에 리눅스에선 호환이 안됨. wchar_t 가 윈도우는 2바이트이지만 리눅스계열은 wchar_t가 4Byte라 char16_t 을 곧이 곧대로 쓰는건 쫌...
노이ㄴ(liliilli)2020-04-22 12:57
답글
추상화 한댔으니 WINAPI 쓸때만 바꿔 쓰면 되지 않음?
익명(223.62)2020-04-22 13:12
답글
2바이트 자료형이면, MS윈도는 UTF-16 인코딩 사용함?
익명(218.147)2020-04-22 15:25
답글
ㅇㅇ 윈도우 내부적으로는 다 UTF-16임
익명(223.62)2020-04-22 15:27
나도 그렇게 하고 있는데. 그냥 wchar_t가 한 cpp 파일 밖으로 빠져나지만 않으면 괜찮겠지. winapi 자체에 wide char를 utf8로 바꿔주는 함수가 있어서 그닥 어렵진 않더라.
익명(58.145)2020-04-22 12:28
답글
난 그냥 mbstowcs 쓰고있음... winapi 함수 있는건 알기는 한데, 걘 지맘대로 메모리 얼록해주는 것 같아서 못씀
그냥 wchar_t 를 안 쓰는게 좋지 않나?
https://gall.dcinside.com/mgallery/board/view/?id=github&no=7799&search_head=10&page=1
봐봐. char *tian_ucs_to_utf8 (uint32_t ucs) 함수 봐바. 님께서 유니코드 스펙상 모든 언어를 다룰거 아니라면 ICU 안 써도 됨.
유니코드라는게 0x12345678 이렇게 최대 4바이트임. 그래서 ucs4 라고 하는건 유니코드가 1대1로 대응되는 거임. uint32_t 임. ucs2 는 2바이트로 표현할 수 있는 유니코드고 그건 uint16_t 로 하면 되겠지. MS윈도에서는 어떤 인코딩 쓰나? MS윈도 GUI 툴킷에서 주력으로 사용하는 유니코드 인코딩으로 바꿔주면 됨.(리눅스 GTK 툴킷은 주력 인코딩이 utf-8 임.)
WINAPI 을 써야한다면 우야함?
위나피가 뭐임? 먹는거임?
아니 윈도우 API (WIN32)의, UCS-2 대응되는 함수의 문자열 인자가 다들 wchar_t 로 받는데, 그렇다고 char_t로 인자 받는 멀티바이트 함수를 쓰면 제약이 있어서 (CHAR_MAX 등등) 울며 겨자먹기로 UCS-2 대응 wchar_t 로 넘겨 써야한단 말이야...
winapi를 쓰는데 리눅스 호환을 왜 고려하는것?
MS윈도 프로그래밍은 왜이리 개떡같냐. scanf_s 함수같은 건 POSIX 준수도 안하고. MS윈도 프로그래밍 안 해본지 20년 넘어서 모르겠당. 헝가리안 표기법 배우기도 싫고. MS회사는 위나피로 똥꼬나 닦으면서 똥꼬 확 찢어져라 ㅋㅋㅋ
MS윈도 프로그래밍하는 사람한테 물어보던가 MS API 검색해보면서 해법 찾아야할 거임. 아니면 리눅스 GTK GDK에 MS윈도 백엔드 있으니까... 그 코드 보고 힌트 얻던가. LGPL 라이선스라 좀 거시기한데, 동일 내용을 MS API 에서 찾아서 MS 문서 보고 코딩하면 MS외에는 라이선스 문제로 아무도 시비 못 검.
석린이 // 윈도우에서는 winapi 을 쓰고, 리눅스에서는 posix 함수를 쓰고. 인터페이스는 extern 함수나 추상 클래스로 만들어서 통일해서 쓰게끔 할려고...
궁금해서 결국 gtk 소스코드를 봤음. wchar_t *wtitle 에 UTF-16 을 저장함. wchar_t *wtitle; wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL); API_CALL (SetWindowTextW, (GDK_WINDOW_HWND (window), wtitle)); MS API 문서를 보니 LPCWSTR 이 wchar_t * 에 대응되나봄. BOOL SetWindowTextW( HWND hWnd, LPCWSTR lpString );
char16_t를 안 쓰는 이유가 있나요
wchar_t 대용으로 char16_t 을 쓸라카면 애초에 리눅스에선 호환이 안됨. wchar_t 가 윈도우는 2바이트이지만 리눅스계열은 wchar_t가 4Byte라 char16_t 을 곧이 곧대로 쓰는건 쫌...
추상화 한댔으니 WINAPI 쓸때만 바꿔 쓰면 되지 않음?
2바이트 자료형이면, MS윈도는 UTF-16 인코딩 사용함?
ㅇㅇ 윈도우 내부적으로는 다 UTF-16임
나도 그렇게 하고 있는데. 그냥 wchar_t가 한 cpp 파일 밖으로 빠져나지만 않으면 괜찮겠지. winapi 자체에 wide char를 utf8로 바꿔주는 함수가 있어서 그닥 어렵진 않더라.
난 그냥 mbstowcs 쓰고있음... winapi 함수 있는건 알기는 한데, 걘 지맘대로 메모리 얼록해주는 것 같아서 못씀
Rust에선 OsString 같은거 만들어서 OS꺼 직접 안쓰는 방향으로 하더라 참고해보셈
https://doc.rust-lang.org/std/ffi/struct.OsString.html
하 아베찡긋콘 화나누
gdkwindow-win32.c 소스코드 보면 답 나옴^^
https://fossies.org/linux/gtk+/gdk/win32/gdkwindow-win32.c
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html
에서 설명 참조하고,
위나미(win api) 함수 이름 MS문서에서 찾아서
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexw
MS문서
보고 작성하면 라이선스 문제는 안 생김.
ㄳ요