我有一组ASCII字符串。它中有一些ASCII字符:
t¹¢Ðèm¯¼®Û=~
我这样做是为了将其转换为NSData:
NSMutableData *inputData = [[inputString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] mutableCopy];
但它返回了这个:
74c292c2 b9c2a2c3 90c3a86d c2af1dc2 bcc2aec3 9bc2adc2 9e3d
翻译后我发现它不一样,结果如下:
t’¹¢Ðèm¯¼®Û­ž=
如何正确读取此ASCII字符串并将其放入NSData实例中。
答案 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¯¼®Û=~
。