메서드를 항상 사용하고 있기 때문에 NSData
범주에 NSData-NSString 변환이 있습니다. 그러나이 대답에 따르면 https://stackoverflow.com/a/2467856/1231948은 그렇게 간단하지 않습니다.UTF-8로 인코딩 된 NSData에 Null로 끝나는 문자열이 포함되어 있는지 확인
- (NSString *) stringValue
{
return [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
}
을 지금까지 그것을 :
지금까지, 나는 같은 이름의 메소드로부터 문자열을 반환하는 다른 데이터 객체의 메소드와 일치 유지하기위한 노력의 일환으로, 내 NSData
카테고리에서이 방법을 성공하지만, 문자열 응답 링크에서도, 널 (null)로 종료되는, 내가 대신이 방법을 사용할지 여부를 결정하는 경우 내가 결정하고 싶습니다 : UTF-8 NSData
인코딩 된 경우
NSString* str = [NSString stringWithUTF8String:[data bytes]];
어떻게 확인합니까 널 용어를 포함한다. inated string?
아래의 답을 얻고 난 후에, 나는 나의
NSData
분류 방법에 대한
stringValue
을 더 철저하게 구현을 썼습니다 :
- (NSString *) stringValue
{
//Determine if string is null-terminated
char lastByte;
[self getBytes:&lastByte range:NSMakeRange([self length]-1, 1)];
NSString *str;
if (lastByte == 0x0) {
//string is null-terminated
str = [NSString stringWithUTF8String:[self bytes]];
} else {
//string is not null-terminated
str = [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
}
return str;
}
어디에서 데이터를 가져 왔습니까? 데이터가 null로 끝나는 경우 변수 또는 신비가되어서는 안됩니다. 예를 들어 UTF-8로 인코딩되었음을 확신 할 수 있습니다. 프로토콜이 지시하는 것이 무엇이든지 그것이 널 종료인지 여부를 결정해야합니다. (예를 들어 null로 끝나는 것이 아닌지 확신하지 못한다면, 널로 끝나는 여러 문자열의 순서가 아니라는 것을 어떻게 확신 할 수 있습니까? 아니면 null로 구분 된 여러 문자열, 약간 다릅니다.) –
저는 확신을 주려고하지는 않지만 오히려 일반성입니다. 저는 다양한 상황에서 데이터를 처리 할 수있을 정도로 견고한 솔루션을 개발하려고합니다. 맞습니다. 두 가지 이유로 UTF-8로 제한됩니다. 1) UTF-8은 온라인 (80 % 이상)에서 가장 널리 사용되는 문자 인코딩이며 W3C에서 다음과 같은 언어의 표준 인코딩으로 권장됩니다. HTML과 XML, 2) 대부분의 경우 UTF-8이 표준이기 때문에 두 번째 매개 변수로 인코딩을 사용하는 별도의 메소드로 다른 인코딩 처리를 예약하고자합니다. 이는 Java API가 나중에 설계된 방식입니다 버전. – Sheamus