2009-05-21 4 views
16

크로스 플랫폼 i18n C++ 코드를 작성하려고합니다. 대부분의 리눅스 시스템은 문자 인코딩으로 UTF-8을 사용하기를 원하기 때문에 Windows의 경우 linux와 wstring에 문자열을 사용해야한다고 생각했습니다. tchar.h는 리눅스에서 사용할 수 있습니까? 리눅스에서 tchar.h를 대체 할 수있는 것은 무엇입니까?리눅스에서 tchar.h

답변

11

this 개의 기사가 유용 할 수 있습니다. 특히 TCHAR을 사용하고 Windows 코드를 다루는 방법에 대해 약간 의논합니다.

기사의 요약은 다음과 같습니다 GNU C 컴파일러이 코드를 (대부분의 휴대용 라이브러리가 자신의 헤더에 TCHAR을 정의하고 wchar_t를 참조) 컴파일 할 때

TCHAR는 와이드 문자 데이터 형식으로 변환됩니다. 사실 C++ 프로그램을 anagram generator로 변환하는 방법이 있습니다. UTF-8로 채워진 표준 C++ 문자열을 사용하고 라이브러리 함수에 wchar_t로 캐스팅 된 포인터로 데이터를 입력했습니다. UTF-32로 해석 된 UTF-32 데이터는 쓰레기와 동일합니다 (그러나 데이터와 버그의 난독 화에 대단히 유용합니다).

+4

tchar.h는 Windows 전용입니다. 그러나 자신의 tchar.h를 사용하는 것은 매우 간단합니다. – Naaff

0

실제로 그렇게 쉽지는 않습니다. string.size()는 유니 코드 문자가 아니라 UTF-8 바이트 수를 제공합니다. 모든 공정성에서 wstring.size()는 대리모가있는 경우에도 문자 수를 제공하지 않습니다. 그러나 실제로는 일반적인 앱에는 사용되지 않습니다.

그래서 진짜 대답은 왜 유니 코드 문자열이 필요한지에 달려 있습니다. UI의 현지화인가요? 사용자 입력이 있습니까? 해당 입력을 구문 분석해야합니까?

0

내 Windows 중심 소스를 빌드하려면 Cygwin의 cygwin \ usr \ include \ w32api 폴더에있는 tchar.h 파일을 사용할 수있었습니다.

저는 실제로 Android NDK를 사용하여 구축하고 있습니다. 제 목적으로 tchar.h의 복사본을 만들어 패치했습니다.

//#include <crtdefs.h> 

#define _CRTIMP 

//#define _strninc(_pc,_sz) (((_pc)+(_sz))) 
// _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);