繁体   English   中英

从NSData中删除非ascii字符?

[英]Removing non-ascii characters from NSData?

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

我正在编码一个包含json的NSData对象,其中一个对象包含一个度符号。 我们相信这是导致问题的原因,并且希望在编码之前将其删除,因为在编码期间会出现问题。

我有很多选项可以从字符串中删除某些字符,但是没有从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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM