gpt4 book ai didi

iphone - 将包含\u#### 的字符串转换为 iOS iPhone 上的字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:57:43 24 4
gpt4 key购买 nike

我在 NSData 变量中收到一个 JSON 响应,然后将 NSDATA 转换为 NSString:

NSString *aStr = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];

问题是这个字符串现在包含格式为\u#### 的字符序列。(例如,Joe\u2019s)。

我想用它们的单个字符表示来转换所有此类事件。 (例如 Joe\u2019s 应该变成 Joe's。

关于如何做到这一点有什么想法吗?

另外,有人能给我指出一个资源,我可以从中学习正确的术语吗?

非常感谢!

最佳答案

我今天找这个问题的答案太久了……最后硬着头皮在 NSString 上写了我自己的类别。随时纠正错误,我不是 unicode 向导。这绝对不能处理 \uffff 之后的 unicode,但在我的情况下我不需要它。

@interface NSString (UnicodeAdditions)
-(NSString *) unescapeUnicode;
@end

@implementation NSString (UnicodeAdditions)

-(NSString *) unescapeUnicode {
NSString *input = self;
int x = 0;
NSMutableString *mStr = [NSMutableString string];

do {
unichar c = [input characterAtIndex:x];
if( c == '\\' ) {
unichar c_next = [input characterAtIndex:x+1];
if( c_next == 'u' ) {

unichar accum = 0x0;
int z;
for( z=0; z<4; z++ ) {
unichar thisChar = [input characterAtIndex:x+(2+z)];
int val = 0;
if( thisChar >= 0x30 && thisChar <= 0x39 ) { // 0-9
val = thisChar - 0x30;
}
else if( thisChar >= 0x41 && thisChar <= 0x46 ) { // A-F
val = thisChar - 0x41 + 10;
}
else if( thisChar >= 0x61 && thisChar <= 0x66 ) { // a-f
val = thisChar - 0x61 + 10;
}
if( z ) {
accum <<= 4;
}

accum |= val;
}
NSString *unicode = [NSString stringWithCharacters:&accum length:1];
[mStr appendString:unicode];

x+=6;
}
else {
[mStr appendFormat:@"%c", c];
x++;
}
}
else {
[mStr appendFormat:@"%c", c];
x++;
}
} while( x < [input length] );

return( mStr );
}

@end

关于iphone - 将包含\u#### 的字符串转换为 iOS iPhone 上的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com