首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将转义的UTF8字符转换回其原始形式

将转义的UTF8字符转换回其原始形式
EN

Stack Overflow用户
提问于 2011-10-23 00:21:16
回答 2查看 13.7K关注 0票数 15

我正在尝试从来自plist的数组中读取字符串,并打印这些字符串。

数组中的字符串包含转义的UTF8字符-例如,当从plist读取时,"Nuša Florjančič“变为"Nu\u0161a Florjan\u010di\u010d"。无法更改plist的内容,但我的程序需要正确显示名称。

奇怪的是,当我对字符串进行硬编码时,Objective-C似乎会自动执行此操作。但是,如果我从plist中获取字符串,则什么也不会发生。

为了给你一个例子,这里有一些代码:

代码语言:javascript
复制
NSString *name1 = @"Nu\u0161a Florjan\u010di\u010d";
NSString *name2 = [list objectAtIndex:0];       
NSLog(@"name 1: %@", name1);
NSLog(@"name 2: %@", name2);

[list objectAtIndex:0]包含@"Nu\u0161a Florjan\u010di\u010d" -唯一的区别是它是通过plist编辑器设置的。

控制台输出为:

代码语言:javascript
复制
2011-10-22 18:00:02.595 Test[13410:11c03] name 1: Nuša Florjančič
2011-10-22 18:00:02.595 Test[13410:11c03] name 2: Nu\u0161a Florjan\u010di\u010d

我尝试了各种方法,包括将字符串转换为C字符串,然后创建一个UTF8编码的NSString对象,但都不起作用。

我真的很感谢你的任何建议,这些建议可能会帮助我解决这个看似平凡的问题。

EN

回答 2

Stack Overflow用户

发布于 2011-10-23 01:30:22

听起来plist中的字符串包含字符"\u0161“,而不是Unicode字符数字0x161。因此,您需要解码从plist中提取的字符串中的\u转义。使用NSNonLossyASCIIStringEncodingNSString可以为您做到这一点

代码语言:javascript
复制
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString *name2escaped = @"Nu\\u0161a Florjan\\u010di\\u010d";
        NSString *name2 = [NSString
            stringWithCString:[name2escaped cStringUsingEncoding:NSUTF8StringEncoding]
            encoding:NSNonLossyASCIIStringEncoding];
        NSLog(@"name2 = %@", name2);
    }
    return 0;
}
票数 41
EN

Stack Overflow用户

发布于 2017-01-11 16:34:07

另一种解决方案是解析你的列表字符串(我习惯于在构建它之前解析它)

代码语言:javascript
复制
NSString yourFinalString = [NSString stringWithCString:[yourOriginalString cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding];

(看起来像克罗地亚语,我认为latin1会很适合)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7860867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档