페르시아어 (utf8)에서 문자열을 비교하고 싶습니다. 나는 L "گل"과 같은 것을 사용해야한다는 것을 알고 wchar_t * 또는 wstring에 저장해야합니다. 질문은 내가 compare() 문자열에 의해 비교할 때 나는 올바른 결과를 얻지 못한다.C++에서 페르시아어와 같은 utf8 문자열을 어떻게 비교할 수 있습니까?
답변
: 텍스트의을 의미 어떤 의미가 있는지 현실적인 비교를하기 전에
일반적으로, 당신은 유니 코드를 정상화 할 필요가 특정 명확한 인코딩은 이미 다음 wchar_t
를 사용하지 않고 L""
리터럴을 사용하지 않는 - 사람들은 유니 코드가 아니라 구현 정의, 불투명 인코딩 only을 위해. 당신의 문자열이 UTF-8에있는 경우
는 char
s의 문자열을 사용합니다. 당신은 원시 유니 코드 코드 포인트 (UCS-4/UTF-32)로 변환 할 경우 이미 그 형태를 가질 경우 현대 컴파일러가있는 경우, 또는, uint32_t
의, 또는 char32_t
s의 문자열에 저장합니다.
당신이 C++ (11)는, 당신의 문자가 char str8[] = u8"گل";
또는 char32_t str32[] = U"گل";
될 수있는 경우. 이것에 대한 자세한 내용은 See this topic을 참조하십시오.
명령 줄 인수 또는 환경과 상호 작용하려면 iconv()
을 사용하여 WCHAR에서 UTF-32 또는 UTF-8로 변환하십시오.
wchar_t
은 UTF-8은 아니지만 (플랫폼)에 따라 일반적으로 하나 UTF-16 또는 UCS-32. UTF-8에서 작업하려면 평범한 이전 char *
또는 string
을 사용하고 비교 함수가 동일한 지 확인하십시오. 인간 답게 을 정렬하려면을 사용하면 어떤 인코딩을 사용하든 상관없이 훨씬 더 복잡해집니다.
String.Compare 두 문자열을 작동합니다 및 문자열 wchar 생성자가없는, 그래서 가능성이있는 오류 char 문자로 wchar에서 constrcting, UTF-8로 작업하면 모든 것을 char로 저장할 수 있으며 "보다 큼"과 "미만"이 문제를 일으키는 것을 제외하고는 모든 것이 잘 작동해야합니다. 그러나 당신은 wchar에있는 사람들에게 문제가 있었을 수도 있습니다 ... – Soren
** 모든 유니 코드 인코딩은 UTF-8, 16 또는 32를 포함하여 바이트 - 동등성 이외의 것으로 바이트별로 비교 될 수 없습니다. 디스플레이는 동일하지만 사용 된 바이트 (예 : R-> L 마커, 멀티 코드 점 디스플레이 수정 자 및 페르시아어와 같은 영어 이외의 언어에서 사용되는 유사 문자)는 사용되지 않습니다. –
@ Yann Ramin : 이것이 바로 유니 코드 데이터 정렬 알고리즘이 정규화 및 기본 무시 문자를 처리하는 이유입니다. 나는 종종 적절한 강도 수준을 가진 collator 객체를 얻은 다음 평등 방법을 호출하므로 유니 코드의 균등 불평등 또는 불평등 동등성에 대한 유니 코드의 재미있는 생각을 염려 할 필요가 없습니다. – tchrist
유니 코드는 악명 높게 비교하기가 어렵습니다. UTF-8, 16 또는 32을 포함하는 임의의 유니 코드 인코딩은, 바이트 와이즈 바이트 동일성 이외 용 비교할 수없는
참고. 디스플레이는 동일하지만 사용 된 바이트 (예 : R-> L 마커, 서로 게이트 쌍, 디스플레이 수정 자 및 페르시아어와 같은 영어 이외의 언어에서 사용되는 유사 문자)는 사용되지 않습니다. 비교하려는 문자열이있는 경우
_ 텍스트 _는 비교하기가 너무나 어렵습니다.ASCII는 세계의 모든 텍스트의 95 %를 무시함으로써 속임수를 사용합니다. – MSalters
- 1. 사용자가 입력 한 문자열을 어떻게 비교할 수 있습니까?
- 2. 문자열을 서면으로 표기하여 비교할 수 있습니까?
- 3. UIPickerView에서 어떻게 비교할 수 있습니까?
- 4. nsstring utf8 : 어떻게 인코딩 된 문자열을 추출 할 수 있습니까?
- 5. PHP에서이 데이터베이스 값을 어떻게 비교할 수 있습니까?
- 6. PHP와 Perl의 성능을 어떻게 비교할 수 있습니까?
- 7. 문자열의 일부분을 어떻게 비교할 수 있습니까?
- 8. 다른 압축 형식을 어떻게 비교할 수 있습니까?
- 9. 어떻게 문자열과 bool 배열을 비교할 수 있습니까?
- 10. 어떻게 anagrams toCharArray 메서드없이 비교할 수 있습니까?
- 11. 객관적인 C에서 responseString을 비교할 수 없다
- 12. 두 문자열을 DateTimes로 변환하고 VB.NET에서 비교할 수 있습니까?
- 13. C에서 int와 float 간의 관계를 직접 비교할 수 있습니까?
- 14. 네이티브 PHP 함수가 배열에있는 문자열을 문자열과 비교할 수 있습니까?
- 15. BLAST를 사용하여 2 개의 비 생물학적 문자열을 비교할 수 있습니까?
- 16. iphone에서 UTF8 문자열을 디코딩하는 방법
- 17. Python에서 유효한 utf8 문자열을 확인하십시오.
- 18. 임의의 문자열을 어떻게 만들 수 있습니까 (암호와 같은 ...)?
- 19. 펄은 파이썬과 같은 문자열을 곱할 수 있습니까?
- 20. regexp에 char를 비교할 수 있습니까?
- 21. 어떻게 비교할 수 있습니다 .Net2.0에서 두 Excel 시트를 비교할 수 있습니까?
- 22. 어떻게 장고 QuerySet에서 2 필드의 가치를 비교할 수 있습니까?
- 23. 선택한 값을 레일에있는 기존 값과 어떻게 비교할 수 있습니까?
- 24. 어떻게 문자열을 디코딩 할 수 있습니까?
- 25. 어떻게 문자열을 분할 할 수 있습니까?
- 26. PostgreSQL utf8 문자 비교
- 27. C에서 어떻게 FTGL에서 텍스트를 움직일 수 있습니까?
- 28. 어떻게 C에서 오디오를 녹음 할 수 있습니까?
- 29. C에서 문자열에 인수를 어떻게 연결할 수 있습니까?
- 30. 어떻게 C에서 비트 맵을 만들 수 있습니까?
C++ 11 (예 : GCC 4.6)이 있습니까? –
평등을 비교하는 것이냐 아니면 소팅의 목적으로 비교하는 것입니까, 아니면 단지 무엇입니까? –
평등에 대한 비교 실제로 – aliakbarian