정규적으로 동일한 유니 코드 문자열이 동일하게 정렬합니까? 때때로.strcoll의 유니 코드 정규화
#include <iostream>
#include <cstring>
#include <clocale>
int main()
{
std::setlocale(LC_COLLATE, "en_US.UTF-8");
if (std::strcoll("\xc3\xa9", "e\xcc\x81"))
std::cout << "FAIL: No Unicode normalization here" << std::endl;
else
std::cout << "WIN: Unicode normalization is performed" << std::endl;
}
내 Cygwin에서화된 Windows 시스템에 WIN에서이 프로그램의 결과, 나는 내 손을 얻을 수있는 모든 리눅스 시스템에 실패합니다.
이 예상되는 동작입니까? WIN을 생성하는 Linux 시스템이 있습니까? Mac OS X은 어떻습니까? FreeBSD?
타사 라이브러리와 정규화 및 동등한 작업을 수행 할 수 있음을 알고 있습니다. UTF-8 로켈의 표준 조합 규칙에 관심이 있습니다.
이 질문은 영감을 받아 this one입니다.
어느 기준이 언급 한'중 * .UTF-8' 로케일의 차이로 표시됩니다. 언어 표준은'C '로켈을 언급하고, POSIX는'POSIX' 로케일을 추가합니다. 나는 * .UTF-8 로케일에 관심이있다. 예, 구현에 특화된 것들이다. –
그러면 의존 할 수없는 구현 관련 답변 만 얻을 수 있습니다. 어쨌든, 나는 C/Unix-y 행동이 암묵적으로 정규화를하지 않을 것이라고 기대한다. – ninjalj
구현 관련 답변은 특정 구현 관련 질문에 대한 응답으로 기대하는 바입니다. 그것은 "리눅스"와 "cygwin"과 "en_US.UTF-8"을 공개적으로 말합니다. 이것들은 모두 구현 관련 사항입니다. 그 점을 잘못 보지 마라. –