在我们的应用程序的iPhone和桌面版本之间的网络中,iPhone发送在桌面上使用的设备名称。问题是一些beta测试者在他们的设备名称中有波浪号(`)。由于某些原因,当它在设备名称中时,它会阻止套接字发送实际的字符串数据。
我试着在发送之前简单地清理设备名称,但是设备名称中的波浪号(在iTunes中输入)在运行时不能识别为波浪号。下面是不起作用的代码:
NSString *safedevicename = [[UIDevice currentDevice] name];
safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"`" withString:@"'"];它找不到代字号的匹配项,也不会替换任何内容。我还使用了rangeOfString来搜索代字号,结果什么也没有返回。我100%确定这个字符,至少在iTunes中输入时是一个代字号。
此外,当将字符串的描述打印到控制台时,字符被编码为\u00b4,当将鼠标悬停在变量上时,它显示为句点.。
有人知道我怎么才能抓住这个角色并把它弄出来吗?另外,在objective C中,有没有一种方法可以更容易地清理字符串,以确保通过套接字发送它是安全的?
编辑:为了将NSString写入NSOutputString,我使用以下代码行:
len = [oStream write:[[writeString dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[writeString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];编辑#2:这行代码可以替换波浪号,但我确信还有其他字符我应该担心:
safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"\\u00b4" withString:@"'"];发布于 2010-03-26 01:08:06
Jason的评论是正确的答案:我需要将编码从NSASCIIStringEncoding更改为NSUTF8StringEncoding。
https://stackoverflow.com/questions/2516931
复制相似问题