1

我在 Javascript 中有这段代码:

var f = chr(50) + chr(0) + chr(1) + chr(64) + chr(24) + chr(0) + chr(0) + chr(1) + chr(159) + chr(13) + chr(0) + chr(0) + chr(224) + chr(7);

function chr(AsciiNum) {
    return String.fromCharCode(AsciiNum);
}

console.log将其输出为

2@
à 

长度为 14。

我正在尝试将其移植到Objective C。我尝试执行以下操作:

NSString *f = [NSString stringWithFormat:@"%c%c%c%c%c%c%c%c%c%c%c%c%c%c",50, 0 ,1, 64 , 24 , 0 , 0 , 1, 159,  13 , 0 , 0 , 224 , 7];

但是在使用 NSLog 时,我收到了与 javascript 代码不同的输出:

2@ü

我究竟做错了什么?是字符集问题吗?

4

1 回答 1

0

好吧,您的问题似乎源于 NSString 的 ASCII 支持仅限于严格的 7 位 ASCII 编码,这意味着仅支持 0-127 字符。您必须使用不同的数据类型来存储您的字符,并且不同的数据类型是unichar,它支持 2^15-1 正是因为它是unsigned short. 但是,您需要将其转换为在 Unicode 中使用此类别运行的 NSString :

@interface NSString (MNNSStringWithUnichar)
+ (NSString *) stringWithUnichar: (unichar) value;
@end

@implementation NSString (MNNSStringWithUnichar)

+ (NSString *) stringWithUnichar:(unichar) value {
     NSString *str = [NSString stringWithFormat: @"%C", value];
     return str;
}
@end

或者干脆NSLog(@"%C", value);

于 2012-07-01T15:15:37.550 回答