将ASCII字符串转换为NSData

时间:2015-11-03 11:43:08

标签: objective-c nsstring ascii aes nsdata

我有一组ASCII字符串。它中有一些ASCII字符:

t¹¢Ðèm¯¼®Û­=~

我这样做是为了将其转换为NSData:

NSMutableData *inputData = [[inputString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] mutableCopy];

但它返回了这个:

74c292c2 b9c2a2c3 90c3a86d c2af1dc2 bcc2aec3 9bc2adc2 9e3d

翻译后我发现它不一样,结果如下:

t’¹¢Ðèm¯¼®Û­ž=

如何正确读取此ASCII字符串并将其放入NSData实例中。

3 个答案:

答案 0 :(得分:0)

试试这个。

NSString *inputString = @"t¹¢Ðèm¯¼®Û­=~";
NSMutableData *inputData = [[inputString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] mutableCopy];
NSString *retStr = [NSString stringWithUTF8String:[inputData bytes]];
//NSLog(@"retStr:%@",retStr);

结果:t¹¢Ðèm¯¼®Û=〜

答案 1 :(得分:0)

首先,您对“ASCII”的含义感到困惑。您提供的字符串不能是ASCII。该字符串中的大多数字符都无法用ASCII编码。您的代码建议您使用“ASCII”表示“UTF-8”,这是一种不同的编码。

您提供的十六进制输出包括您未显示的控制字符。例如,第二个字符是c2 92,PRIVATE USE TWO,它没有官方定义,并且经常呈现为不可见(虽然我看到它在某些地方显示为。)

您在最后提供的字符串看起来像Mac OS罗马字符串解码数据。你没有说明你是如何获得这个字符串的,但是你正在使用另一种编码。

重点是您必须在整个系统中使用一致的编码。如果您使用的是UTF-8,则必须在任何地方使用它。如果你正在使用ASCII(几乎没有理由再使用它),那么很多字符都不会被编码。

答案 2 :(得分:0)

我做了一些试验和错误,发现字符串不是ASCII字符串。它是ISO Latin 1编码的字符串。所以这样做可以解决我的问题:

NSString *inputString = @"t¹¢Ðèm¯¼®Û­=~";
NSMutableData *data = [[inputString dataUsingEncoding:NSISOLatin1StringEncoding] mutableCopy];

我翻译数据后的结果:t¹¢Ðèm¯¼®Û­=~