So there is some step in the procedure, where the URL is stored inside XML, then retreived and the final URL is not the same as the original ?
Yeah, I understand you feel a bit lost with my partial explanation
If you directly type "vlc zip://file.zip!/file.avi", well.. there's no XML, no URL encoding, nothing strange here.
But if you open "vlc file.zip" then, internally, VLC will read the index of the Zip file, generate an in-memory XSPF playlist containing encoded URLs of the form zip://file.zip!/file.avi.
This internal playlist will be immediately read by the XSPF demuxer, so that the tree of the files inside the Zip archive appears in VLC playlist.
The playlist items have encoded URLs (not web encoding).
Opening file.zip directly should be the preferred behaviour, otherwise you would have to encode the URL by yourself if it contains a "!/" (or more easily copy/paste a playlist item's URL). If the URL does not contain a !/ (except for the jar-style separator), you can happily use any utf-8 url (the decoding function will not mess with that).
Finally, if you use a URL-encoded (%-notation) URL, it also works because VLC internally decodes the URL before sending it to the module. So you should be happy in every case
Hope this helps you understand, because this was a bit tricky.
rgds,
jpeg