다른 플랫폼 (Windows 및 Linux)의 인코딩에 문제가 있습니다. 윈도우에서는 wchar_t의 크기가 2 바이트인데 반해 Linux에서는 4 바이트입니다. wchar_t를 두 플랫폼에서 같은 크기로 "표준화"할 수 있습니까? 추가 라이브러리없이 구현하기가 어렵습니까? 지금은 printf/wprintf API를 목표로하고 있습니다. 데이터는 소켓 통신을 통해 전송됩니다. 고맙습니다.다른 플랫폼에서 wchar_t 인코딩
답변
다른 플랫폼과 아키텍처에서 유니 코드 데이터를 보내려면 UTF-8 인코딩과 (8 비트) char
을 사용하는 것이 좋습니다. UTF-8에는 endiannes 문제가없는 것과 같은 몇 가지 이점이 있습니다 (UTF-8은 단순한 바이트 순서입니다. 대신 UTF-16 및 UTF-32 모두 little-endian 또는 big-endian이 될 수 있습니다 ...).
Windows에서 Windows API는 UTF-16에서 작동하기 때문에 Win32 API 경계에서 UTF-8 텍스트를 UTF-16으로 변환하면됩니다. 이를 위해 MultiByteToWideChar()
API를 사용할 수 있습니다.
이것이 정답 인 이유에 대한 자세한 내용은 http://www.utf8everywhere.org/를 참조하십시오. –
고마워, 왜 내가이 hehe에 대해 생각할 수 없는지 생각하고있어. Solved :-) – user2399415
나는이 문제를 해결하기 위해 전송하기 전에 모든 문자열을 UTF-8로 변환해야한다고 생각합니다. Windows에서는 WideCharToMultiByte 함수를 사용하여 wchar_t 문자열을 UTF-8 문자열로 변환하고 MultiByteToWideChar을 사용하여 UTF-8 문자열을 wchar_t 문자열로 변환합니다.
Linux에서는 일들이 쉽지 않습니다. wctomb 및 mbtowc 기능을 사용할 수 있지만 변환 대상은 기본 로케일 설정에 따라 다릅니다. 따라서 이들을 UTF-8 및 유니 코드로 /로 변환하려면 로케일이 UTF-8 인코딩을 사용하도록 설정해야합니다.
This 문서는 좋은 자료 일 수도 있습니다.
리눅스에서는'iconv_open ("UTF-8", "WCHAR_T")'을 사용하여'iconv()'변환 디스크립터를 열고'wchar_t' 문자열을 UTF-8 문자열로 변환 할 수 있습니다. 반대로). – caf
- 1. wchar_t?
- 2. JSON 파일을 다른 플랫폼에서 공유하려는 경우 인코딩 유형에주의해야합니까?
- 3. 다른 플랫폼에서 컴파일하는 JNI
- 4. 다른 플랫폼에서 로직 공유
- 5. 유니 코드 인코딩의 wchar_t 크기
- 6. 길이가 wchar_t *
- 7. 다른 플랫폼에서 "닫기"아이콘이 필요합니까?
- 8. 다른 플랫폼에서 #include 경로 처리하기
- 9. 다른 플랫폼에서 CUDA 결과가 다릅니다
- 10. 다른 플랫폼에서 iOS 앱 관리하기
- 11. 다른 플랫폼에서 다른 ZipOutputStream 결과가 발생했습니다.
- 12. wchar_t 템플릿 전문화
- 13. wchar_t ~ keybd_event 보내기
- 14. wchar_t 인쇄/쓰기?
- 15. C++ 단축 wchar_t 배열
- 16. char 대 wchar_t
- 17. wchar_t 배열을 PUNICODE_STRING으로 변환하십시오.
- 18. NSString에서 wchar_t *로?
- 19. wchar_t *에서 문자열로 변환
- 20. wchar_t *를 문자열로 변환
- 21. 2 wchar_t 배열을 비교
- 22. wchar_t 및 POSIX 라이브러리
- 23. wchar_t to octets - C?
- 24. wchar_t PHP UTF8 파일
- 25. ncurses를 사용하여 wchar_t 표시
- 26. wchar_t *를 이진 파일
- 27. wchar_t * 이상한 행동
- 28. getcwd의 wchar_t 버전이 있습니까?
- 29. 바이트 배열의 내용을 wchar_t *
- 30. UNICODE_STRING to wchar_t * null
'wchar_t '로 할 수있는 유용한 것들은 이식성이 없으며'wchar_t'로 할 수있는 유용한 것들은 유용하지 않습니다. 죄송합니다. 다른 것을 사용하십시오. –