답변:
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString
내부적으로 UTF-16을 사용하므로 UTF-16 <-> UTF-8 변환을 수행 할 필요가 없기 때문에 약간의 성능 향상이있을 수 있습니다. 개인적으로 우리는 @ gnasher729가 제안한 바와 같이 성능보다 견고성을 선호하고 모든 곳에서 UTF-8을 사용합니다.
하다:
NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
그런 다음 계속 진행하십시오 NSJSONSerialization:JSONObjectWithData
.
의견, 공식 문서 및 검증 에 따라이 답변은 NULL 종결 자 제거와 관련하여 업데이트되었습니다.
dataUsingEncoding에 의해 문서화 된 바와 같이 :
반환 값
dataUsingEncoding:allowLossyConversion:
두 번째 인수로 NO 를 호출 한 결과
getCString : maxLength : encoding : 및 cStringUsingEncoding :에 의해 문서화되어 있습니다 .
반환 된 데이터 는 NULL 종결자가 없기
dataUsingEncoding:allowLossyConversion:
때문에 엄격한 C- 문자열 이 아닙니다.
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:
.)
스위프트 개발자가 여기 오면
NSString / String에서 NSData로 변환
var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
목표 -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
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
str
127보다 큰 코드 포인트를 포함하는 경우 잘못된 것입니다. str.length
바이트 수가 아닌 유니 코드 문자 수를 제공 하기 때문 입니다. 예를 들어, 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!