2009-06-18 2 views
29

정보를 잃지 않고 C++ std::string을 UTF-8 또는 std::wstring으로 변환하려고합니다 (비 ASCII 문자가 포함 된 문자열을 고려하십시오). http://forums.sun.com/thread.jspa?threadID=486770&forumID=31에 따르면std :: string.c_str()은 어떤 인코딩을 사용합니까?

:

성병 : : 문자열이 ASCII 문자가 아닌 문자가있는 경우, 당신은 UTF-8 인코딩으로 변환하는 기능을 제공해야합니다 [...]

std::string.c_str()은 어떤 인코딩을 사용합니까? 크로스 플랫폼 방식으로 UTF-8 또는 std::wstring으로 변환하려면 어떻게해야합니까?

답변

35

std::string은 인코딩을 사용하지 않습니다. 사용자가 입력 한 바이트가 반환됩니다. 예를 들어, 해당 바이트는 ISO-8859-1 인코딩을 사용하거나 다른 인코딩을 사용하고있을 수 있습니다. 실제로 인코딩에 대한 정보는 없습니다. 바이트가 어디서 왔는지 알고 있어야합니다.

+0

본질적으로 인코딩을 미리 알지 못해 std :: string을 변환 할 수있는 방법이 없습니다. 나는 std :: string을 취하는 API 함수를 작성하고 있기 때문에 물어 본다. 나는 문서가 어떤 포맷을 전달할 지 사용자에게 알려줄 필요가 있다고 생각한다. – Gili

+3

@ Gili, 맞다. 알 수없는 인코딩의 바이트 시퀀스를 UTF-8 (또는 다른 어떤 것도 ;-)로 변환 할 수 없다. 호출자에게 UTF-8 데이터를 제공하도록 요청하는 것이 좋습니다. 대부분의 다른 인코딩은 가능한 모든 유니 코드 문자열을 인코딩 할 수 없습니다. @Naaff가 말했듯이 ASCII는 UTF-8 (및 ISO-8859- * 및 기타 여러 인코딩)의 특수한 경우이므로 걱정할 필요가 없습니다 (이 사실을 사용자에게 상기시켜주는 문서의 각주는 _them_ 걱정;-). –

+0

좋은 대답, 고맙습니다. – Gili

7

std::string에는 바이트 시퀀스가 ​​포함되어 있으므로 인코딩은 사용자가 결정합니다. 인코딩 방법을 알아야합니다. 그러나 그것이 다른 것임을 모르는 경우에는 아마 ASCII 일 것입니다. 어떤 경우에는 이미 UTF-8과 호환됩니다.

+12

" ... "는 많은 문자 인코딩 오류의 근원이됩니다. 필자는 문자 인코딩과 관련해서는 절대로 추측하지 말 것을 제안합니다. 각각의 경우에 문자 집합을 지정하지 않으면 추가 매개 변수/반환 값을 지정하여 인코딩을 나타냅니다. – MtnViewMark

관련 문제