2010-01-13 69 views
0

我正在实现一个接口,它指定文件上的writeBytes()和readBytes()。 数据必须作为JSON传输。NSString到ByteArray并返回

对于我的ReadBytes执行以下操作: 1. NSFileHandle readDataofLength - 从文件 2. NSString的initWithData读:编码: - 指定一个给定的编码 3.的NSString的getBytes:缓冲 4.将每个缓冲液[ I]为JSON阵列,用于传输:[116101115116]例如“测试”为UTF-8

在另一方面writeBytes应该做大约相同: 1.解析JSON阵列到的NSArray 2。 NSArray getObjects:缓冲区 - 到此为止的转换成功 3. NSString initWithBytes:缓冲区长度:编码: - 不起作用,返回值是空 4. NSData的dataUsingEncoding: 5. NSFileHandle写数据

显然的NSString initWithBytes不能与内容处理的缓冲液如[116101115116]。有没有其他方法可以将NSString转换为ByteArray并返回?

感谢

回答

0

是否使用了NSUnicodeStringEncoding编码?如果是这样,那么您可能必须在字节前加上有效的B.O.M(请参阅NSString reference,“解释UTF-16编码数据”部分)。

您是否使用NSASCIIStringEncoding进行了测试,检查您的代码是否适用于简单情况?

0

您是否验证过数组中的字节是字符串的有效UTF-8表示? (http://en.wikipedia.org/wiki/UTF-8

如果没有,你会得到零:

#import <Foundation/Foundation.h> 

int 
main() 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    char ary[] = { 116, 101, 115, 116, 255 }; 

    NSString *s = [[NSString alloc] initWithBytes: ary length: 5 encoding: NSASCIIStringEncoding]; 
    NSString *s2 = [[NSString alloc] initWithBytes: ary length: 5 encoding: NSUTF8StringEncoding]; 
    NSLog(@"s: %@, s2: %@", s, s2); 

    [pool release]; 
} 

运行时,这个打印:

 
2010-01-13 14:08:23.315 a.out[50653:903] s: testÿ, s2: (null)