2010-06-07 2 views
2

char에서 TCHAR로 라이브러리를 이식하고 있습니다. 이 단편의 count 매개 변수는 MSDN에 따라 바이트 수가 아닌 멀티 바이트 문자 수입니다. 그래서, 나는이 권리를 얻었 느냐? VC9의 프로젝트 속성은 '유니 코드 문자 세트 사용'이라고 말하지만 그것이 맞다고 생각합니다. 그러나 이것이 내 count 매개 변수에 어떻게 영향을 미치는지는 아닙니다. Windows 플랫폼 만 _mbsncmp 및 _mbsnbcmp에서 지원tchar 안전한 함수 - UTF-8 상수의 개수 매개 변수

_tcsncmp(access, TEXT("ftp"), 3); //or do i want _tcsnccmp? 

는 "strncmp의 멀티 바이트 버전입니다. 대부분의 대부분의 카운트 바이트에 비교합니다 멀티 바이트 문자와 _mbsnbcmp 카운트에서 _mbsncmp가 비교합니다. 그들은 모두 현재의 멀티 바이트 코드 페이지를 사용합니다.

_tcsnccmp 및 _tcsncmp는 각각 _mbsncmp 및 _mbsnbcmp에 해당하는 일반 함수입니다. _tccmp는 _tcsnccmp와 같습니다. "

비슷한 질문은 _tcslen과 _tcsclen입니다.

답변

4

네, 맞습니다.

그러나 질문은 TCHAR로 가져 오는 이유는 무엇입니까? _UNICODE 정의에 민감한 것입니다.

왜 UTF8과 char *를 사용하지 않습니까?

+0

그 점을 무시하지 않습니까? 주변의 코드가 사용하고 있기 때문에 tchar로만 이식 중입니다. 내가 선택의 여지가 있니? –

+2

TCHAR은 포기해야하는 잘못된 노력이라는 심각한 믿음이 있습니다. 자세한 내용은 http://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful을 참조하십시오. –

+0

1995 년에 작성된 구문 분석 메소드를 이식하여 basic_string 에서 작동합니다. 나는 파싱 로직이 멀티 바이트 문자에 민감 할 때 이것이 될 수 있다고 생각하기 시작했다. 나는이 함수에 UTF-8 바이트 배열을 전달하는 것이 매우 아름답다고 생각하지 않는다. –

2

TCHAR_UNICODE의 정의에 따라 8 비트 또는 16 비트 유형입니다. 그러나 UTF-8 은 항상을 사용하므로 8 비트 코드 단위를 사용하므로 TCHAR을 사용하면 어리석은 행위입니다. 그냥 char을 사용하십시오.

TCHAR은 레거시 8 비트 코드 페이지를 사용하는 "A"함수와 UTF-16을 사용하는 "W"함수의 두 가지 버전의 Windows API의 존재와 관련이 있습니다. UTF-8 is not supported. API 호출에 대해 UTF-8 문자열을 UTF-16으로 명시 적으로 변환하여 Windows에서 UTF-8을 사용할 수 있지만 _UNICODE 또는 TCHAR에서 도움을 얻지 못할 수 있습니다.