0

アプリケーションの iPhone バージョンとデスクトップ バージョンの間のネットワークでは、iPhone はデスクトップで使用するデバイス名を送信します。問題は、一部のベータ テスターのデバイス名にチルダ (`) が含まれていることです。何らかの理由で、これがデバイス名に含まれていると、ソケットが実際の文字列データを送信できなくなります。

送信する前にデバイス名を単純にクリーンアップしようとしましたが、デバイス名のチルダ (iTunes に入力されたもの) が実行時にチルダとして認識されません。動作しないコードは次のとおりです。

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

チルダは検出されず、何も置換されません。またrangeOfString、チルダを検索することもありましたが、何も返されません。少なくとも iTunes に入力されている文字はチルダであると 100% 確信しています。

また、文字列の説明をコンソールに出力する場合、文字は としてエンコードされ\u00b4、変数の上にカーソルを置くとピリオドとして表示されます.

このキャラクターをつかんでそこから出す方法を知っている人はいますか? また、Objective C で文字列をより簡単にクリーンアップして、ソケット経由で安全に送信できるようにする方法はありませんか?

編集: NSString を NSOutputString に書き込むには、次のコード行を使用します。

len = [oStream write:[[writeString dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[writeString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];

編集#2:このコード行はチルダを置き換えるために機能しますが、心配すべき他の文字があると確信しています:

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

1 に答える 1

0

Jason のコメントは正解でした。エンコーディングを から に変更する必要がありましNSASCIIStringEncodingNSUTF8StringEncoding

于 2010-03-25T17:08:05.763 に答える