Becky, do you know why this escaping was originally put in place? From our investigations it is unnecessary on iOS 5.0, 5.1 and 6, so we can drop it, and the iOS-specific readAsText implementation.
If no one can remember why it was there (its existence predates the porting to Apache repos, so I can't see the commit that added it) and it seems to pass all the tests, then I vote to remove this extra complexity. Braden On Tue, Jan 8, 2013 at 10:21 AM, Braden Shepherdson <bra...@chromium.org>wrote: > Okay, Andrew and I investigated this a bit more this morning and found > that I was getting some broken results. > > I can't reproduce the broken tests due to escaping, I suspect I had an old > version that wasn't merging in the iOS version of FileReader. > > However, we continue to see that at least on 6.0 (downloading the 5.0 > simulator to check) on the default bridge, removing the encoding and > decoding works fine, including for international characters. I'll follow up > with the results on 5.0, and maybe experiment with other bridge modes too. > Possibly this is an old workaround for a bug in iOS versions we no longer > support. > > Braden > > > On Tue, Jan 8, 2013 at 9:05 AM, Braden Shepherdson <bra...@chromium.org>wrote: > >> Um, what Becky describes is exactly the opposite of what I saw. The test >> for international characters was failing before I removed the encoding >> because the percent-encoded string did not match the unencoded expectation. >> When I removed the encoding from the native code, then all the tests >> including that one started passing. >> >> I edited the common js implementation of readAsFile to handle the >> slicing, and that's working. I didn't think to check for platform-specific >> implementations. Now that I'm looking at that implementation, I'm wondering >> why it isn't being used, since then the decoding should be working and the >> slicing should be broken, but I've never seen that test result. >> >> Braden >> >> >> On Mon, Jan 7, 2013 at 8:39 PM, Andrew Grieve <agri...@chromium.org>wrote: >> >>> Right, what Becky said. >>> >>> It might be worth looking into having the iOS bridge take care of >>> international characters directly instead of special-casing the >>> FileReader. >>> We should be able to escape characters using \uXXXX instead of percent >>> escaping them. If you're interested in looking into this, let me know. >>> Otherwise I'll look into it. >>> >>> >>> On Mon, Jan 7, 2013 at 8:16 PM, Becky Gibson <gibson.be...@gmail.com> >>> wrote: >>> >>> > The reason for encoding on iOS was to support international characters. >>> > The response from read as text is decoded in the iOS specific version >>> of >>> > readAsText at >>> > >>> https://github.com/apache/cordova-js/blob/master/lib/ios/plugin/ios/FileReader.jsline65. >>> I wouldn't suspect that the all of the mobilespec file tests >>> > would pass with the encoding removed since there are tests to check for >>> > extended characters? >>> > >>> > Becky >>> > >>> > Sent from my iPad >>> > >>> > On Jan 7, 2013, at 6:30 PM, Braden Shepherdson <bra...@chromium.org> >>> > wrote: >>> > >>> > > I've recently been implementing support for Blob.slice() for >>> FileReader >>> > > files (sort of). With real native File and Blob objects, they >>> actually >>> > hold >>> > > the binary data. Cordova File objects are just records passed to >>> > > FileReaders. Regardless, the API for File.slice() is identical: it >>> takes >>> > a >>> > > start and optional end position, and returns a new File. Asking >>> > FileReader >>> > > to fetch that new file will return just the specified segment of the >>> > file. >>> > > >>> > > Some examples are in order. Suppose the file we're reading contains >>> the >>> > > text: >>> > > "All that is gold does not glitter, not all those who wander are >>> lost." >>> > > Then >>> > > f.slice(4, 8) would result in "that" >>> > > f.slice(9) would be "is gold does not glitter, not all those who >>> wander >>> > are >>> > > lost." >>> > > f.slice(-5, -1) would be "lost" >>> > > >>> > > This is implemented on Android and iOS for both reading text and >>> reading >>> > > data URLs. It's straightforward to implement on other platforms, and >>> I >>> > > encourage maintainers of other platforms to add this. >>> > > >>> > > I'll be updating the docs tomorrow, including the following quirk on >>> iOS. >>> > > >>> > > >>> > > That quirk is that iOS encodes the response to readAsText using >>> > %-escapes, >>> > > so that spaces become %20 and so on. This breaks a handful of spec >>> tests >>> > > including mine. It seems very puzzling, since a quick test with that >>> > > encoding removed shows that all the specs are now passing. I didn't >>> > commit >>> > > that, I just wanted to see if the bridge code would die horribly or >>> > > something. This has been in the codebase as far back as Github's >>> history >>> > > goes (the name change to Cordova), so I was unable to discover the >>> > original >>> > > reason for it. >>> > > >>> > > Shaz, Andrew, any idea what's going on here? Is this a relic of an >>> old >>> > > bridge that can be removed? I'm not sure whether this is a breaking >>> > change >>> > > for iOS, since Android and presumably other platforms do not do this. >>> > > >>> > > Braden >>> > >>> >> >> >