NSString *message = @"testing";
NSUInteger dataLength = [message lengthOfBytesUsingEncoding:NSUnicodeStringEncoding];
void *byteData = malloc( dataLength );
NSRange range = NSMakeRange(0, [message length]);
NSUInteger actualLength = 0;
NSRange remain;
BOOL result = [message getBytes:byteData maxLength:dataLength usedLength:&actualLength encoding:NSUnicodeStringEncoding options:0 range:range remainingRange:&remain];
NSString *decodedString = [[NSString alloc] initWithBytes:byteData length:actualLength encoding:NSUnicodeStringEncoding];
我的问题是我希望decodeString可以测试,但它看起来像中文字符。我认为这可能是一个空终止数据的问题,但似乎这应该不是问题。
答案 0 :(得分:3)
你想要这样的东西吗?
NSString *message = @"testing";
NSData *bytes = [message dataUsingEncoding:NSUTF8StringEncoding];
NSString* messageDecoded = [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding];
NSLog(@"decoded: %@", messageDecoded);
答案 1 :(得分:2)
UTF-16字节顺序在编码和解码之间反转。
您可以执行以下任一操作:
使用指定显式字节顺序的编码(例如NSUTF16BigEndianStringEncoding
,NSUTF16LittleEndianStringEncoding
,NSUTF8StringEncoding
)。
将NSStringEncodingConversionExternalRepresentation
传递给options:
中的getBytes:maxLength:usedLength:encoding:options:range:
参数。这会将字节顺序标记添加到数据的开头。
使用NSData
,如Elvis建议的那样。
目前,在大多数情况下,UTF-8是首选的Unicode编码。