设备名称中的Tilde导致NSOutputStream套接字出现问题

时间:2010-03-25 15:37:25

标签: iphone objective-c cocoa-touch nsoutputstream

在我们的应用程序的iPhone和桌面版本之间的网络中,iPhone通过设备名称发送以便在桌面上使用。问题是一些beta测试人员的设备名称中有波浪号(`)。出于某种原因,当它在设备名称中时,它会阻止套接字发送实际的字符串数据。

我尝试在发送之前简单地清理设备名称,但设备名称中的波形符号(在iTunes中输入)在运行时无法识别为波形符号。这是不起作用的代码:

NSString *safedevicename = [[UIDevice currentDevice] name];
safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"`" withString:@"'"];

它没有发现波浪号,也没有替换。我还使用rangeOfString来搜索波浪号,但它什么也没有返回。我百分百肯定这个角色,至少在iTunes中输入时,是一个波浪号。

此外,在将字符串的描述打印到控制台时,该字符编码为\u00b4,当将鼠标悬停在变量上时,它显示为句点.

任何人都知道如何抓住这个角色并将其从那里拿出来?另外,在目标C中是否有办法更方便地清理字符串以确保通过套接字发送是安全的?

编辑: 将NSString写入NSOutputString也可能有用,我使用以下代码行:

len = [oStream write:[[writeString dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[writeString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];
编辑#2:编辑#2: 这行代码可以替代Tilde,但我确信还有其他一些我应该担心的角色:

safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"\\u00b4" withString:@"'"];

1 个答案:

答案 0 :(得分:0)

Jason的评论是正确的答案:我需要将编码从NSASCIIStringEncoding更改为NSUTF8StringEncoding