2009-11-04 6 views
1

크로스 플랫폼 프로젝트에서 합리적인 C++에서 URI 이스케이프를 수행하는 좋은 방법을 찾고 있습니다.URI Escape C++ wstring

나는이 같은 문자열을 걸릴 함수 싶습니다

L"jiayou加油" 

을 반환 :

L"jiayou%E5%8A%A0%E6%B2%B9" 

나는 wchar_t를 사용하는 작은 modifacations으로, this 같은 어떤 것을 사용하여 보았다. 그러나 printf 호출 전에 utf-16에서 utf-8로 변환해야합니다. 이것은 나를 문자 인코딩 지옥 이끌고있다.

이 모든 접근법과 다른 모든 접근법은 잘못된 방식으로 느껴집니다. C++에서 wstring을 이스케이프 처리하는 좋은 방법이 있습니까?

+0

'wchar_t'가 UTF-16이되는 플랫폼에서 작업하고 있다는 것을 알고 있습니다. Mac OSX에서는 그렇지 않습니다. 단지 코드 포인트 일뿐입니다 (일명 UTF32). Mac에서는 한 번에 두 개의 'wchar_t'대리 문자를 인코딩 할 필요가 없으므로 큰 차이가 있습니다. – MSalters

+0

그리고 여러분은 어쨌든 문자 인코딩을 벗어나지 않을 것입니다. 당신은 어떻게 "순진한"사람을 피합니까? 저것은 "na % EFve"입니까? (ISO-8859-1 문자 인코딩 사용) – MSalters

답변

3

당신이 어떤 일을 하든지 상관없이 당신은 어떤 종류의 문자 인코딩 (문자 인코딩을 사용하는 것입니다)에 있습니다.

http://labs.apache.org/webarch/uri/rfc/rfc3986.html#characters 가입일

:

우리당 구 아마 문자 시퀀스와 같은 자원을 식별하기 위해, 데이터를 인코딩하는 방법을 제공한다. URI 문자는 차례로 전송 또는 표시를 위해 옥텟으로 자주 인코딩됩니다. 이 규격은 URI 문자와 그 문자를 저장하거나 전송하는 데 사용되는 옥텟 사이의 매핑을 위해 특정 문자 인코딩을 요구하지 않는다. URI가 프로토콜 요소에 나타나면 문자 인코딩은 해당 프로토콜에 의해 정의됩니다. 그러한 정의가 없으면 URI는 주변 텍스트와 동일한 문자 인코딩에 있다고 가정합니다.

그래서 어느 시점에서 URI를 보내는 사람에게 적합한 인코딩으로 URI를 변환해야합니다. UTF8이라면 퍼센트 변환을 수행하기 전에 변환을 수행하여 이미 찾은 라이브러리 루틴을 사용할 수 있습니다. UTF8이 아닌 경우 URI의 수신자가 기대하는 바를 알아야합니다 (다시 말하자면, 그것은 문자 인코딩을 사용하는 방식입니다 - 다른 사람이 기대하는 것을 알고 있거나 말할 수 있어야합니다). 백분율 인코딩은 기대하는 문자 세트 인코딩의 문자를 인코딩합니다.