简体   繁体   English

使用NSString将UTF-8编码转换为ISO 8859-1编码

[英]Convert UTF-8 encoding to ISO 8859-1 encoding with NSString

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). 我有一个应用程序从服务器读取UTF-8格式的数据,但它必须在ISO 8859-1(Latin-1)中显示。 Are there any Cocoa APIs to achieve this? 是否有任何Cocoa API来实现这一目标?

You can use NSString 's getCString:maxLength:encoding: method, like this: 您可以使用NSStringgetCString:maxLength:encoding:方法,如下所示:

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: 完成后,您可以使用stringWithCString:encoding: class方法从相同的编码重新初始化NSString实例:

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

我更喜欢使用dataUsingEncoding:allowLossyConversion:因为它不需要你猜测要分配多少存储空间,并且返回的NSData告诉你需要多少字节。

Jacobs answer didn't really work for my. 雅各布斯的答案对我来说并没有真正起作用。 What did eventually work for me was to only use 最终对我有用的是仅使用

[username stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]

use 采用

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

Example: 例:

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

That should do it. 应该这样做。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM