developer tip

C ++의 유니 코드 처리

copycodes 2020. 8. 15. 09:27
반응형

C ++의 유니 코드 처리


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 만 처리하지만 부분을 제거하는 것이 더 간단한 다른 것을 발견했습니다.

Here's a list of the embedded libraries that seem decent.

Embedded libraries


Use IBM's International Components for Unicode


Have a look at the recommendations of UTF-8 Everywhere

참고URL : https://stackoverflow.com/questions/55641/unicode-processing-in-c

반응형