URI Escape C ++ wstring

时间:2009-11-04 15:43:32

标签: c++ cross-platform character-encoding uri

我正在寻找一种在C ++中进行URI Escape的好方法,这对于跨平台项目来说是合理的。

我想要一个带有这样字符串的函数:

L"jiayou加油"

返回:

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

我查看了使用像this这样的东西,使用wchar_t进行了少量修改。但是,这需要在printf调用之前从utf-16转换为utf-8。这导致了我编码地狱的角色。

我和其他所有其他方法只是感觉错误。有没有一种方法可以在C ++中使用URI转义wstring?

1 个答案:

答案 0 :(得分:3)

无论你做什么,你都会使用某种字符编码地狱(这就是字符编码的方式)。

来自http://labs.apache.org/webarch/uri/rfc/rfc3986.html#characters

  

URI语法提供了一种将数据编码的方法,可能是为了识别资源,作为字符序列。反过来,URI字符经常被编码为用于传输或呈现的八位字节。该规范没有强制要求URI字符与用于存储或传输这些字符的八位字节之间的映射的任何特定字符编码。当URI出现在协议元素中时,字符编码由该协议定义;如果没有这样的定义,则假定URI与周围文本的字符编码相同。

因此,在某些时候,您需要将URI转换为适合您发送URI的任何内容的编码。如果那是UTF8,那么在执行百分比编码之前你也可以进行转换,这样你就可以使用你已经找到的库例程。如果它不是UTF8那么你需要知道URI的接收者期待什么(再次,这就是charset编码的方式 - 你必须知道另一个人期待什么,或者能够告诉他)所以你可以百分比编码它所期望的字符集编码中的字符。