일부 환경에서는 std::string
이 내부적으로 UTF-8을 사용합니다. 반면, 내 플랫폼에서 Windows는 std::string
은 ASCII 전용입니다. 이 동작은 std::locale
을 사용하여 변경할 수 있습니다. STL의 제 버전에는 문자열에 사용할 UTF-8 패싯이 없거나 적어도 찾을 수 없습니다. 그러나 나는 fstream
클래스 집합과 함께 사용할 패싯이 있습니다.기본적으로 utf8을 처리하는 스트림
편집 : "내부에서 UTF-8 사용"이라고 말하면 어떤 환경에서는 UTF-8
인코딩 된 문자열을 허용하는 std::basic_filebuf::open()
과 같은 메서드를 참조하고 있습니다. 나는 이것이 실질적으로 std::string
문제가 아니라 오히려 어떤 OS가 기본적으로 UTF-8
을 사용한다는 것을 안다. 내 질문은 "귀하의 구현이 잘못된 시퀀스의 코드 변환을 어떻게 처리합니까?"로 읽어야합니다.
이 스트림은 다른 플랫폼/구현에서 잘못된 코드 시퀀스를 어떻게 처리합니까?
내 UTF8
facet
파일의 경우 오류를 반환하기 만하면 더 이상 스트림을 읽을 수 없습니다. 나는 유니 코드 "잘못된 char"0xfffd 값을 더 나은 옵션으로 변경하려고 생각했을 것이다.
제 질문은 UTF-8
으로 제한되지 않습니다. UTF-16
서로 게이트 쌍을 잘못 입력하셨습니까?
예를 들어 보겠습니다. UTF-8
에서 wchar_t
locale
까지 UTF-8
인코딩 파일을 열어 봅시다. 구현시 유효하지 않은 UTF-8
시퀀스가 어떻게 처리됩니까? std::wstring
을 입력하고 std::cout
으로 인쇄하십시오. 이번에는 단독 대리인으로 인쇄하십시오.
사용 사례에 따라 다릅니다. 때로는 오류가 신호로 전달되기를 원할 수도 있습니다 (잘못된 데이터가 완전히 받아 들여지지 않을 때). 때로는 U + FFFD를 원한다. 간혹 나쁜 데이터를 버리기를 원할 때가 있습니다. 때로는 다른 것을 원합니다. –
@ R.MartinhoFernandes 구현을 통해 최소한 이러한 상황을 처리하는 방법을 알려줄 수 있습니까? – Twifty
예에서 정확한 코덱 패턴을 알려주시겠습니까? 그것입니다 :'std :: codecvt_utf8'? - 정확한 흐름은 무엇입니까? 'std :: wifstream'? 어떤 정확한 문자열 유형을 사용할 계획입니까? 'std :: wstring' 또는'std :: string'? –