C ++에서 유니 코드 처리의 모범 사례는 무엇입니까?
답변
- ICU 를 사용 하여 데이터 (또는 유사한 라이브러리) 처리
- 자신의 데이터 저장소에서 모든 것이 동일한 인코딩으로 저장되어 있는지 확인하십시오.
- 문자열 길이, 대문자 상태 등과 같은 일상적인 작업에 항상 유니 코드 라이브러리를 사용하고 있는지 확인하십시오
is_alpha
. 원하는 정의가 아닌 한 표준 라이브러리 내장 기능을 사용하지 마십시오 . - 충분히 말할 수 없습니다. 정확성에 관심 이 있다면 인덱스를 반복 하지 말고 항상 유니 코드 라이브러리를 사용하십시오.
string
답변
이전 C ++ 표준과의 하위 호환성에 관심이 없다면 현재 C ++ 11 표준에 유니 코드 지원이 내장되어 있습니다. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
따라서 C ++에서 유니 코드 처리에 대한 진정한 모범 사례는 내장 된 기능을 사용하는 것입니다. 하지만 기존 코드베이스에서는 항상 가능한 것은 아니지만 표준은 현재 매우 새로운 것입니다.
편집 : 명확히하기 위해 C ++ 11은 이제 유니 코드 리터럴과 유니 코드 문자열을 지원한다는 점에서 유니 코드를 인식합니다. 그러나 표준 라이브러리는 유니 코드 처리 및 변환을 제한적으로 만 지원 합니다. 현재 필요에 따라 이것으로 충분할 수 있습니다. 그러나 지금 당장 많은 양의 무거운 작업을 수행해야하는 경우 더 심층적 인 처리를 위해 ICU 와 같은 것을 사용해야 할 수도 있습니다 . 다른 인코딩 간의 텍스트 변환에 대한보다 강력한 지원을 포함하기 위해 현재 작업중인 몇 가지 제안이 있습니다 . 내 추측 (그리고 희망)은 이것이 다음 기술 보고서의 일부가 될 것이라는 것 입니다.
답변
우리 회사 (및 기타 회사)는 원래 Taligent에서 개발 한 오픈 소스 ICU ( Internation Components for Unicode ) 라이브러리를 사용합니다.
문자열, 로케일, 변환, 날짜 / 시간, 데이터 정렬, 변환 등을 처리합니다. al.
ICU 사용 설명서로 시작
답변
다음은 Windows 프로그래밍을위한 검사 목록입니다.
- _T ( “my string”)로 묶인 모든 문자열
- strlen () 등 함수는 _tcslen () 등으로 대체되었습니다.
- char * 및 const char * 대신 LPTSTR 및 LPCTSTR 사용
- Dev Studio에서 새 프로젝트를 시작할 때 종교적으로 프로젝트 속성에서 Unicode 옵션이 선택되어 있는지 확인하십시오.
- C ++ 문자열의 경우 std :: string 대신 std :: wstring을 사용하십시오.
답변
C ++ 에서 대소 문자를 구분하지 않는 문자열 비교 살펴보기
이 질문에는 유니 코드에 대한 Microsoft 문서 링크가 있습니다. http://msdn.microsoft.com/en-us/library/cc194799.aspx
해당 기사 옆에있는 MSDN의 왼쪽 탐색 부분을 보면 유니 코드 함수와 관련된 많은 정보를 찾을 수 있습니다. “문자 인코딩”( http://msdn.microsoft.com/en-us/library/cc194786.aspx ) 에 대한 장의 일부입니다.
다음과 같은 하위 섹션이 있습니다.
- 코드 페이지 모델
- Windows의 2 바이트 문자 집합
- 유니 코드
- 혼합 환경의 호환성 문제
- 유니 코드 데이터 변환
- Windows 기반 프로그램을 유니 코드로 마이그레이션
- 요약
답변
이것이 모든 사람에게 모범 사례는 아니지만 원하는 경우 고유 한 C ++ UNICODE 루틴을 작성할 수 있습니다!
주말에 끝냈어. 많은 것을 배웠지 만 100 % 버그가 없다고 보장하지는 않지만 많은 테스트를했고 제대로 작동하는 것 같습니다.
내 코드는 New BSD 라이선스하에 있으며 여기에서 찾을 수 있습니다.
http://code.google.com/p/netwidecc/downloads/list
WSUCONV라고하며 UTF-8, UTF-16 및 표준 ASCII간에 변환하는 샘플 main () 프로그램과 함께 제공됩니다. 메인 코드를 버리면 유니 코드 읽기 / 쓰기를위한 멋진 라이브러리가 있습니다.
답변
위에서 말했듯이 라이브러리는 대형 시스템을 사용할 때 가장 좋은 방법입니다. 그러나 때로는 자신이 직접 처리하고 싶을 때가 있습니다 (라이브러리가 마이크로 컨트롤러와 같은 많은 리소스를 사용하기 때문일 수 있습니다). 이 경우 실제로 필요한 부분을 복사 할 수있는 간단한 라이브러리가 필요합니다.
Willow Schlanger의 예제 코드는 좋은 것 같습니다 (자세한 내용은 답변 참조).
나는 또한 더 작은 코드를 가지고 있지만 완전한 오류 검사가없고 UTF-8 만 처리하지만 부분을 제거하는 것이 더 간단한 다른 것을 발견했습니다.
괜찮아 보이는 임베디드 라이브러리 목록이 있습니다.
임베디드 라이브러리
- http://code.google.com/p/netwidecc/downloads/list(UTF8 , UTF16LE, UTF16BE, UTF32)
- http://www.cprogramming.com/tutorial/unicode.html(UTF8 )
- http://utfcpp.sourceforge.net/ (단순 UTF8 라이브러리)