编码NSString使用NSASCIIStringEncoding缩短

时间:2017-05-18 18:50:27

标签: ios objective-c character-encoding nsstring

我有这个:

<53657269 616c3a20 39303030 30303138 3b4d6f64 656c3a20 32323031 3b466972 6d776172 653a2030 3431353b 4c696272 6172793a 20535444 30363132 3b566f69 63653a20 4d31303b 546f7765 723a2059 65733b52 65636f72 643a2059 65733b44 69616c3a 204e6f3b 554f7074 733a2031 39383b46 756e6374 696f6e73 3a205245 44411034 424c5545 1011546f 6c6c0118 48796d6e a003466e 63351066 666f6f64 10556261 636f0000 746f6173 10253b4c 6162656c 733a2042 4c554542 4c554523 466e6338 544f4153 54455223 466e6337 4241434f 4e23466e 63354c41 50544f50 53235245 44415445 58415323 466e6336 42524943 4b532374 6f617354 4f415354 45522362 61636f42 41434f4e 23666f6f 64424143 4f4e3b4d 696c5665 723a2035 2e302e36 2e313b4c 6f67696e 3a205965 73>

我用它来转换为NSString:

NSString *info = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

我的输出是:

  Serial: 90000018;Model: 2201;Firmware: 0415;Library: STD0612;Voice: M10;Tower: Yes;Record: Yes;Dial: No;UOpts: 198;Functions: REDA4BLUETollHymn Fnc5ffoodUbaco

如果您转换整个集合,您将获得比字符串中显示的更多的内容。为什么在编码中缩短它?

使用随时可用的编码器快速转换,即可获得完整转换:

Serial: 90000018;Model: 2201;Firmware: 0415;Library: STD0612;Voice: M10;Tower: Yes;Record: Yes;Dial: No;UOpts: 198;Functions: REDA4BLUETollHymn Fnc5ffoodUbacotoas%;Labels: BLUEBLUE#Fnc8TOASTER#Fnc7BACON#Fnc5LAPTOPS#REDATEXAS#Fnc6BRICKS#toasTOASTER#bacoBACON#foodBACON;MilVer: 5.0.6.1;Login: Yes

为什么NSString * info = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];只写了大约一半的字符串?

1 个答案:

答案 0 :(得分:1)

我怀疑它正在转换整个字符串,但是你用来检查它的机制是截断它。看起来您的ASCII编码数据中嵌入了空字符。 NSString完全能够保存嵌入的空字符,但是任何转换为​​C风格字符串的内容都会在遇到其中一个后停止处理。

如果使用以下内容对字符串进行后处理,会得到什么?

unichar nullUnichar = 0;
NSString* nullCharString = [[NSString alloc] initWithCharacters:&nullUnichar length:1];
info = [info stringByReplacingOccurrencesOfString:nullCharString withString:@"\\x00"];