Answers:
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString
内部使用UTF-16,因此可能会有一点性能提升,因为它不必执行UTF-16 <-> UTF-8转换。就个人而言,我们更喜欢(如@ gnasher729所建议的)健壮性而不是性能,并在各处使用UTF-8。
NSString *str = @"helowrld";
// This converts the string to an NSData object
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
您可以从此链接获取参考
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
做:
NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
然后继续进行NSJSONSerialization:JSONObjectWithData
。
经过评论,官方文档和验证后,此答案已针对删除所谓的NULL终止符进行了更新:
返回值
dataUsingEncoding:allowLossyConversion:
以NO作为第二个参数的调用结果
如getCString:maxLength:encoding:和cStringUsingEncoding:所记录:
请注意,返回的数据
dataUsingEncoding:allowLossyConversion:
不是严格的C字符串,因为它没有NULL终止符
dataUsingEncoding:
不返回以空值结尾的数据。只有UTF8String
和其他返回C字符串的方法才能返回以Null结尾的字符串。
(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
。我一定早些错过了。不过,我一定会在将来写任何东西。
cStringUsingEncoding:
。我当时在看下面dataUsingEncoding:
。)
目标C:
NSString *str = @"test string";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
NSString *thatStr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
迅速:
let str = "test string"
let data = NSKeyedArchiver.archivedData(withRootObject: str)
let thatStr = NSKeyedUnarchiver.unarchiveObject(with: data) as! String
首先,您应该使用dataUsingEncoding:
而不是通过UTF8String
。仅UTF8String
在需要使用C
该编码的字符串时才使用。
然后,对于UTF-16
,只需传递NSUnicodeStringEncoding
而不是NSUTF8StringEncoding
在您的dataUsingEncoding:
消息中即可。
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
str
包含大于127的代码点时,此答案是错误的。这是因为str.length
给出的是Unicode字符数,而不是字节数。例如,如果str
为@"にほんご"
,则str.length
给出4而str.UTF8String
实际上包含12个字节。即使您替换str.length
为strlen(str.UTF8String)
,对于str
包含NULL字符(例如)的情况仍然是错误的@"にほ\0んご"
。
目标C:
NSString到NSData:
NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSData到NSString:
NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
迅速:
字符串到数据:
var testString = "string"
var somedata = testString.data(using: String.Encoding.utf8)
数据到字符串:
var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
NSString *str = @"Banana";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:true];
目标C
NSString *str = @"Hello World";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
迅速
let str = "Hello World"
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: false)