Convert UTF-8 encoding to ISO 8859-1 encoding with

2020-02-11 04:14发布

问题:

I have an application that reads the data in UTF-8 format from the server, but it has to be displayed in ISO 8859-1(Latin-1). Are there any Cocoa APIs to achieve this?

回答1:

You can use NSString's getCString:maxLength:encoding: method, like this:

char converted[([string length] + 1)];
[string getCString:converted maxLength:([string length] + 1) encoding: NSISOLatin1StringEncoding];

NSLog(@"%s", converted);

Once you have this, you can then re-initialize an NSString instance from that same encoding using the stringWithCString:encoding: class method:

NSString *converted_str = [NSString stringWithCString:converted encoding:NSISOLatin1StringEncoding];


回答2:

I prefer using dataUsingEncoding:allowLossyConversion: because it doesn't require you to guess how much storage to allocate, and the returned NSData tells you how many bytes were required.



回答3:

Jacobs answer didn't really work for my. What did eventually work for me was to only use

[username stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]


回答4:

use

+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc

Example:

latinStringForDisplay = [NSString stringWithCString:yourCstringHere encoding:NSISOLatin1StringEncoding];

That should do it.