ios - 使用 NSASCIIStringEncoding 对 NSString 进行编码

标签 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编码:NSASCIIStringEncoding];只向字符串写入大约一半?

最佳答案

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

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

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

关于ios - 使用 NSASCIIStringEncoding 对 NSString 进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055717/

相关文章:

ios - 如何使用 OpenGl ES 在 Xcode 中减小立方体上的 4 个面的大小

python-3.x - 如何在 Python3 中从 Éphémère 到 Éphémère?

mysql - django中出现字符编码错误不正确的字符串值: '\\xF0\\x9F\\x

PERL:如何检测字符串编码以便我可以使用正确的字符集

ios - 从嵌套 json 数组获取数据时出现问题

ios - AVAudioPlayer 问题导致应用程序崩溃

ios - 在嵌套 block 中保留对象的正确方法是什么

ios - CVImageBuffer带有额外的列填充。我该如何修剪?

ios - 如何在 ios 中使用不同的 api 在 Debug模式和 Release模式下运行应用程序

objective-c - 如何在不引用类的情况下在 Objective C 中调用 +class 方法?