문제

NSStream을 통해 서버로 전송할 데이터 패킷을 구성하고 있습니다. A '§'(ASCII 코드 167)로 두 개의 데이터를 분리하려고합니다. 이것이 서버가 구축되는 방식이므로 그 경계 내에 머무르려고 노력해야합니다 ...

unichar asciiChar = 167;  //yields @"§"
[self setSepString:[NSString stringWithCharacters:&asciiChar length:1]]; 

sendData=[NSString stringWithFormat:@"USER User%@Pass", sepString];

NSLog(sendData);

const uint8_t *rawString=(const uint8_t *)[sendData UTF8String];

[oStream write:rawString maxLength:[sendData length]];  

따라서 최종 결과는 다음과 같아야합니다. 그리고 SendData가 처음 구성 될 때.

USER User§Pass 

그러나 서버 측에서 수신되면 다음과 같습니다.

//not a direct copy and paste. The 'mystery character' may not be exact
USER UserˤPas

... Seperator 문자열의 길이가 2 개가되었고 마지막 문자는 명령에서 자랐습니다. 나는 이것이 UTF8 변환에 의해 원인이라고 생각합니다.

누구든지 나를 위해 이것에 대해 약간의 빛을 발할 수 있습니까?

모든 도움이 크게 감사하겠습니다!

도움이 되었습니까?

해결책

이 문자의 UTF-8에서 올바른 인코딩은 2 바이트 시퀀스 0xc2 0xa7입니다. 이것이 당신이 얻는 것입니다. (fileformat.info 이것은이 물건에 귀중합니다.) 이것은 라틴 -1 세트에서 벗어 났으므로 단일 바이트 167 인코딩을 얻기 위해 nsutf8stringencoding 대신 nsisolatin1stringencoding을 사용하고 싶어합니다. 보다 NSString -dataUsingEncoding:.

다른 팁

당신이 가진 것과 당신이 전송하고 싶은 것은 실제로 UTF-8 현이 아니며, 기술적으로 미국-ASCII가 아닙니다. 왜냐하면 그것은 7 비트에 불과하기 때문입니다. 작업하는 프로토콜에 따라 임의의 바이트 배열을 전송하려고합니다. 바이트 배열, 사용자 이름 및 비밀번호의 두 필드는 자체가 UTF-8 문자열 일 수 있지만 167 분리기 UTF-8 문자열이 될 수 없습니다.

다음은 다음과 같습니다.

  • 구성 uint8_t* 적어도 두 가지 다른 것을 사용하는 바이트 배열 NSString 객체 플러스 167 암호. 사용자 이름이나 암호에 ASCII가 아닌 문자가 포함될 수있는 경우에 필요합니다.
  • 사용 NSString 방법 getBytes:maxLength:usedLength:encoding:options:range:remainingRange 그리고 설정 encoding 에게 NSASCIIStringEncoding. 이렇게하면 사용자 이름과 비밀번호가 US-ASCII 전용임을 다른 곳에서 검증해야합니다.
  • 사용 NSString 방법 getCString. 그러나 원하는 인코딩을 지정할 수 없기 때문에 더 이상 사용되지 않았습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top