字节数组为utf8字符串

时间:2010-10-19 19:31:24

标签: objective-c string ascii byte

如何将我的字节数组转换为处理瑞典字母åäö?

的字符串

我现在这样做: NSString * hexString = [NSString stringWithFormat:@“%c”,resData [i]];

(resData包含ascii字符) 但是当我在输出标签中使用hexString时,我得到了所有非英语字符的乱码。 如何将选定的字节设置为处理瑞典字符的编码?

此致 丹尼尔

2 个答案:

答案 0 :(得分:2)

我从 NSString 引用中得到它:

- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding

所以你应该这样做

[[NSString alloc] initWithBytes:resData 
                  length:yourLength
                  encoding:NSUTF8StringEncoding]

答案 1 :(得分:2)

resData不包含ASCII字符,因为ASCII不包含å,ä和ö的字符。如果resData是UTF-8编码的字符串,则使用多个字节对某些字符(包括这些字符)进行编码。

看起来你想要一种打印* n * th字符的方法。首先,按照@Jack的说法将这些字节转换为NSString

/* Assuming |resData| is NULL-terminated and UTF-8 encoded... */
NSString *text = [NSString stringWithUTF8String:resData];

现在,要打印text的第*个字符:

NSUInteger n = 3;
NSString *character = [text substringWithRange:NSMakeRange(n, 1)];
NSLog(@"character #%d: %@", n, character);

您还可以将character设置为控件的字符串值。它应该显示得很好。

关键外卖:byte[i]不一定与* i * th字符相同。文本总是被编码,你必须始终(痛苦地)意识到这一点。