This section explains the concept of escape and insert, which is necessary for avoiding conflicts of characters and interpreting URI correctly.
A character in the URI may not be available on the keyboard or might not be usable in contexts where it may conflict with a reserved character. In either case, the character can be encoded with a '%' followed by its ASCII hexadecimal equivalent code. For more information, refer to Escape encoding and decoding.
The following example shows how the character "#" is encoded with a "%" followed by its ASCII hexadecimal equivalent code "%23". To modify the data and escape encode, the following functions are used:
_LIT8(KInsertEscape,"file#1"); //data to insert dpath->InsertAndEscapeCurrentL(KInsertEscape); //escape encode and insert segment const TDesC8& des = dpath->Parser().Des(); //descritpor contains "/Myfolder/file%231/logs"
The code escape encodes the segment and inserts the escaped version
before the current parsed segment. des
holds "/Myfolder/file%231/logs
" after inserting the escape encoded
segment "file%231
".
_LIT8(KPushEscape,"file#1"); dpath->PushAndEscapeFrontL(KPushEscape); //escape encode and insert the segment const TDesC8& des6 = dpath->Parser().Des(); //descritpor contains "/file%231/Myfolder/logs"
The code escape encodes the segment file#1
and inserts the escaped version at the beginning of the path. des
holds "/file%231/Myfolder/logs
" after
inserting "file%231
". To insert an escape encoded
version of the segment at the end of the path, use CDelimitedPath8::PushAndEscapeFrontL()
.
In all the three insert functions, the newly inserted segments should contain a single path segment, as any path delimiters in the segment will be converted to an escape triple.
Note: In case of Unicode data, first convert to utf8, escape encode, re-convert to 16-bit, and then insert the escaped version of the path segment.