2009-11-04 81 views
1

我正在尋找一種在C++中執行URI轉義的好方法,這對於跨平臺項目來說是合理的。URI Escape C++ wstring

我想這將需要一個字符串,這樣的功能:

L"jiayou加油" 

,並返回:

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

我看着使用像this一些事情,有輕微modifacations使用wchar_t的。但是,這需要在printf調用之前從utf-16轉換爲utf-8。這導致我失望字符編碼地獄。

這個和我所看到的所有其他方法只是感覺像錯誤的方式。有沒有一種好的方法來使用C++逃避wstring?

+0

我知道您正在使用'wchar_t'恰好是UTF-16的平臺嗎?在Mac OSX上,它不是,它只是代碼點(又名UTF32)。這是一個很大的區別,因爲在Mac上你不需要一次編碼兩個'wchar_t'代理。 – MSalters 2009-11-04 15:49:19

+0

反正你不會轉義字符編碼。你如何逃避「天真」?那是「NA%EFVE」嗎? (假定ISO-8859-1字符編碼) – MSalters 2009-11-04 16:03:49

回答

3

無論你做什麼,你都在某種字符編碼地獄(這是它與字符編碼的方式)。

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

的URI語法提供編碼數據的方法,大概是用於識別資源,作爲一個字符序列的緣故。反過來,URI字符經常被編碼爲用於傳輸或演示的八位字節。本規範沒有規定URI字符與用於存儲或傳輸這些字符的字節之間的映射的任何特定字符編碼。當URI出現在協議元素中時,字符編碼由該協議定義;沒有這樣的定義,URI被假定爲與周圍文本相同的字符編碼。

因此,在某些時候,您需要將您的URI轉換爲適合您發送URI的編碼。如果這是UTF8,那麼在執行百分比編碼之前,您還可以進行轉換,以便可以使用已找到的庫例程。如果它不是UTF8,那麼你需要知道URI的接收者期望的是什麼(再次,這就是字符集編碼的方式 - 你必須知道其他人的期望,或者能夠告訴他),所以你可以百分比編碼字符集中的字符編碼。