On Thu, Jul 22, 2010 at 6:25 PM, Joe Turner <joetur...@me.com> wrote:
> I'm having an issue with NSPropertyListSerialization, where I will call 
> dataWithPropertyList:format:options:error:, to get the data from a property 
> list–this part goes fine. However, then I need the data as a string, so I can 
> upload it to a web service. However, when I call initWithData:encoding: to 
> get a string (I'm using NSASCIIStringEncoding, but have tried many others as 
> well), wherever there was a letter with an accent, weird stuff happens. Like 
> é turns into Ä. I'm fine with losing accents, but right now, I can't even 
> seem to do that–I just get the Ä's. Is there any way I can use a different 
> encoding or something else to keep the accents for the time being, and then 
> filter them out when I create the post data with 
> dataUsingEncoding:allowLossyConversion:?

There are two potential encoding mismatches here:

1) The encoding of the serialized plist vs. the encoding you pass to
-initWithData:encoding:
2) The encoding of the data you send to the web service vs. the
encoding the service is expecting to receive

You need to make sure that both of these situations are handled correctly.

As James says, the "standard" (more accurately, "assumed by default")
encoding of XML is UTF-8. But you can do even better than that, if you
like, since the only logical choice for plist format in this case is
XML: you can check the encoding of the serialized plist by creating an
NSXMLDocument out of it and asking for its -characterEncoding. While I
doubt that NSPropertyListSerialization is ever going to start emitting
XML documents that are not UTF-8 encoded, this is the most correct
approach.

Either way, that gives you the answer for what encoding you should be
passing -initWithData:encoding:. But I'm kind of curious why you're
bothering to convert it to a string in the first place, since it can't
possibly be of any benefit to you. NSString's internal representation
is UTF-16 anyway, so the first thing -initWithData:encoding: is going
to do is convert your XML document (with its encoding="utf-8" header!)
into UTF-16. Then at some point down the line you'll need to ask for
the data back in UTF-8 format, or else you'll wind up with a lying
encoding directive.

Long story short, it sounds like you're abusing NSString. Data are not
the strings, and strings are not data; Cocoa is designed to keep the
two concepts separate.

--Kyle Sluder
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to