CHANSI2Unicode
ANSI 문자열을 Unicode 문자열로 변환합니다.
long CHANSI2Unicode ( const char* pChars, // string to convert long nChars, // number of bytes in string wchar_t* pWChars, // wide-char buffer long maxWChars, // wide char buffer length GSCharCode charCode = CC_Default // Character codepage of input CHANIS2UnicodeCacheRef* cache = NULL // can be used to cache conversion result, if called twice );
파라미터
- pChars
- [in] 변환할 character 문자열을 가리킵니다.
- nChars
-
[in] pChars 파라미터가 가리키는 문자열의 바이트 단위 크기를 지정합니다. 또는 문자열이 null로 끝날 경우 CStringLen이 될 수 있습니다.
만약 이 문자열이 null로 끝나면, 결과로 나오는 wide character 문자열은 null terminator를 갖고 있으며 리턴된 길이는 null terminator를 포함하고 있습니다.
만약 이 파라미터가 양의 정수이면, 이 함수는 정확하게 지정한 바이트들의 수를 처리합니다. 만약 주어진 길이가 null terminator를 포함하지 않는다면, 결과로 나오는 wide character 문자열은 null로 끝나지 않게 되며, 리턴된 길이는 null terminator를 포함하지 않습니다.
- pWChars
-
[out] 변환된 문자열을 받는 버퍼를 가리킵니다.
maxWChars가 null 포인터인 경우에만 NULL이 될 수 있습니다.
- maxWChars
-
[in] pWChars 파라미터가 가리키는 버퍼의 wide character 단위의 크기를 지정합니다.
만약 이 값이 0이면, 이 함수는 wide character 단위의 요청된 버퍼 크기를 리턴합니다. 그리고 pWChars 버퍼를 사용하지 않습니다.
ArchiCAD 7.0 R1/V1에서 이 파라미터에 대한 제한사항을 구현하는 것은 설명을 보십시오.
- charCode=CC_Default
- [in] 변환을 수행하기 위해 사용하는 코드 페이지를 지정합니다. 더 많은 정보는 GSCharCode를 보십시오. 이 파라미터에 대해서는 CC_UTF8이 유효합니다.
- cache
-
[in/out] 만약 null이 아니면, 2-단계 호출들에 대한 변환 결과를 캐시합니다.
일반적으로 당신은 동일한 ANSI 문자열로 변환을 2번 호출합니다.
먼저 결과의 길이를 계산하기 위해 당신은 버퍼를 할당할 수 있습니다. 그리고 나서 버퍼에 결과를 저장합니다.
길이 계산을 위해 사용된 변환된 문자열을 캐시하기 위해 이 파라미터를 사용할 수 있습니다. 그래서 이것은 변환시에 재사용될 수 있습니다.
만약 maxChars가 0이며 cache가 NULL이 아니면, 이것은 NULL ANIS2UnicodeCacheRef를 가리켜야 합니다.
만약 재활용 가능한 정보가 무엇이라도 존재한다면, 그것은 이 레퍼런스 안에 저장될 것입니다.
레퍼런스는 차후 호출시에 CHANSI2Unicode 또는 CHFreeANSI2UnicodeCache로 해제됩니다.
만약 maxChars가 0이 아니며 cache가 NULL이 아니면, 유효한 케시를 가리킵니다. 변환시 도움을 받기 위해 이 캐시를 사용합니다.
cache가 0이 아닌 경우, 이 함수는 pWChars와 nWChars 대신 cache 데이터를 사용할 수도 있습니다.
cache는 해제될 것이며 사용 후에 0으로 채워질 것입니다.
GS::ANIS2UnicodeCacheRef cache = 0; len = CHANSI2Unicode (ansiStr, GS::CStringLen, 0, 0, CC_Default, true, &cache); if (len > 0) { try { p = new GS::uchar_t [len]; res = CHANSI2Unicode (ansiStr, GS::CStringLen, p, len, CC_Default, true, &cache); } catch (std::bad_alloc& ) { if (cache) CHFreeANSI2UnicodeCache (cache); } }
리턴 값
만약 함수가 성공하고 maxWChars가 0이 아니면, 리턴 값은 pWChars가 가리키는 버퍼에 작동된 wide character들의 수입니다.
만약 함수가 성공하고 maxWChars가 0이면, 리턴 값은 변환된 문자열을 받을 수 있는 버퍼에 대한 wide character 단위의 요청된 크기입니다.
만약 함수가 실패하면, 리턴 값은 0입니다. 이 함수는 다음의 경우 실패할 수 있습니다:
- 메모리가 부족함.
- 유효하지 않은 flag/파라미터들.
- Unicode 변환이 존재하지 않음.
- 제공된 버퍼가 너무 작음.
설명
pChars와 pWChars 포인터들은 동일하거나 중첩되어서는 안 됩니다. 그러한 경우에 대한 결과는 정의되어 있지 않습니다!
표현할 수 없는 문자들은 Windows의 경우 시스템 의존적인 기본 대체 문자로 변환되며, MacOS의 경우 '?'로 변환됩니다.
이 함수는 MacOS의 경우 CoreFoundation String 서비스들을, Windows의 경우 MultiByteToWideChar를 이용하여 구현되었습니다.
요구사항
- 버전: GSRoot 1.3 또는 이후
- 헤더: CH.hpp
- 라이브러리 가져오기: GSRootImp.lib
- 모듈: GSRoot