문제

C ++에서 WCHAR_T 문자열을 대문자에서 소문자로 변환하려면 어떻게합니까?

이 문자열에는 일본어, 중국어, 독일어 및 그리스 캐릭터가 혼합되어 있습니다.

나는 Towlower를 사용하는 것에 대해 생각했다 ...

http://msdn.microsoft.com/en-us/library/8h19t214%28vs.80%29.aspx

.. 그러나 문서는 다음과 같습니다.

Towlower의 사례 변환은 로케일에 따라 다릅니다. 현재 로케일과 관련된 캐릭터 만 할 경우를 대비하여 변경됩니다.

편집 : 아마도 내가하는 일을 설명해야 할 것입니다. 사용자로부터 유니 코드 검색 쿼리를받습니다. 원래 UTF-8 인코딩에 있지만 WideChar로 변환하고 있습니다 (문구에서 잘못 될 수 있습니다). 내 디버거 (vs2008)는 "가변적 인 빠른 시계"에있는 일본어, 독일어 등 캐릭터를 올바르게 보여줍니다. 유니 코드에서 다른 데이터 세트를 살펴보고 검색 문자열의 일치를 찾아야합니다. 검색이 사례에 민감 할 때해야 할 문제는 없지만, 케이스에 민감하지 않은 경우 더 문제가됩니다. 문제를 해결하기위한 (순진한) 접근 방식은 모든 입력 데이터와 출력 데이터를 소문자로 변환 한 다음 비교하는 것입니다.

도움이 되었습니까?

해결책

문자열에 모든 문자가 포함 된 경우 코드 세트는 유니 코드 기반이어야합니다. 제대로 구현 된 경우 유니 코드 (4 장 '캐릭터 속성')는 문자가 대문자인지, 소문자 매핑 등을 포함하여 문자 속성을 정의합니다.

그 서문을 감안할 때 towlower() 기능 <wctype.h> 사용하기에 올바른 도구입니다. 작업을 수행하지 않으면 공급 업체와 논의 할 Qoi (구현 품질) 문제가 있습니다. 공급 업체가 응답하지 않으면 대체 라이브러리를보십시오. 이 경우 고려할 수 있습니다 ICU (유니 코드의 국제 구성 요소).

다른 팁

당신은 불쾌한 문제가 있습니다. 일본 지역은 독일어를 전환하는 데 도움이되지 않으며 그 반대도 마찬가지입니다. 사로화의 개념이없는 언어가 있습니다.toupper 그리고 친구들은 여기서 No-Op가 될 것입니다. 그렇다면 같은 언어에서 문자열을 개별 단어 덩어리로 나눌 수 있습니까? 가능하면 조각을 변환하고 묶을 수 있습니다.

이렇게 대답합니다 여러 지역에서 작업하기 위해 패싯으로 작업하는 방법을 보여줍니다. 이것이 Windows에 있으면 Win32 API 기능 사용을 고려할 수 있습니다. C ++에서 작업 할 수 있다면 NET (관리자 C ++)를 사용할 수 있습니다. char.ToLower 그리고 string.ToLower 유니 코드를 준수하는 함수.

살펴보십시오 _wcslwr_l 안에 <wchar.h> (MSDN).

각 로케일의 입력에서 함수를 실행할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top