从 NSData 中删除非 ascii 字符?

Removing non-ascii characters from NSData?

首先,我不确定发生了什么,或者我是否完全理解它来描述问题,所以我会尽力而为。

我正在对包含 json 的 NSData 对象进行编码,其中一个对象包含度数符号。我们认为这是导致问题的原因,并且希望在编码之前将其删除,因为问题发生在编码过程中。

我有很多选项可以从字符串中删除某些字符,但 none 无法从 NSData 对象本身进行删除。想知道这是否可能,或者它是否与我已经编码的方式有关。

这就是 NSData 对象被编码并变回 NSData 对象以将其序列化为 json 的方式。现在我不尝试使用拉丁语 1 删除度数符号,因为我想使用另一个字符但不需要它,这可能不是最好的方法,但它适用于通过的大多数其他数据对象通过它只是不是这个所以这需要改变。

NSString* stringISOLatin1 = [NSString stringWithCString:data.bytes encoding:NSISOLatin1StringEncoding];
NSData* dataUTF8 = [stringISOLatin1 dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];

结果有点奇怪,大部分时间都运行良好,甚至在屏幕上显示时在文本中包括度数符号。其他时候,在编码后字符串在最后返回时会变得混乱,这使得它无法被序列化。

任何帮助将不胜感激,即使它只是导致更好地解释所发生的事情。谢谢

问题可能是您正在使用 NSString:stringWithCString:encoding: 转换数据对象。此函数要求数据以空值终止。 NSData 对象不必以 NULL 终止,因为它们具有明确的长度。如果缺少 NULL 字符,它会继续读取字符串后面的任何内容,从而在末尾给您带来垃圾,或者可能因为内存冲突而崩溃。

改用这个:

NSString *stringISOLatin1 = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];