2

iOS 開発での文字列エンコーディングの問題に遭遇しました。話は以下の通り。

中国語でいくつかの値を作成し、それらの値の NSDictionary を作成します。辞書はネットワーク リクエストのパラメーターとして使用されます。

ここに画像の説明を入力

- (void)createActivity
{
    NSString *actionTheme = titleF.text;
    NSString *actionTitle = biaotiF.text;
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:actionTheme, @"actionTheme", actionTitle, @"actionTitle",nil];
    [self networkrequest:];
}

次に、辞書に対していくつかの作業が行われました。

辞書を NSString の型として JSON の形式に変換します。

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

文字列に中国語の単語があるため、文字列をエンコードします。

NSString *urlEncodedString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

最後に、上記の文字列を使用して完全な URL が作成されました。

http://app.ic100.com/action/add?paramJson=%7B%22actionTheme%22%3A%22%E6%88%96%E8%80%85%E5%92%8C%E7%94%9F%E6%B4%BB%22%2C%22actionSite%22%3A%22%E5%8E%A (something like this)

ネットワーク リクエストにサード パーティの「ASIFormDataRequest」を使用し、StringEncoding も設定します。

ASIFormDataRequest *requstHttp  = [[ASIFormDataRequest alloc] init];
[requstHttp setStringEncoding:NSUTF8StringEncoding];
....

すべてのデータがサーバーに正常に送信されましたが、サーバーからこれらのデータを要求して iPhone に表示すると、. 読めないテキストになります。

ここに画像の説明を入力

文字列をエンコードまたはデコードする必要があるすべての場所を注意深くチェックしましたが、utf8 のみが使用されています。さらに、サーバー側では、他のエンコーディングも使用されていません。私の同僚は、Android プラットフォームから送信されたデータをテストしましたが、問題ありませんでした。そのため、いくつかの点を見逃している可能性があると思います。

何かアドバイスはありますか?

4

1 に答える 1

0

クラスBase64を使用すると、文字列をエンコードまたはデコードできます。

HEREからプロジェクトに Base64 クラスを追加します

エンコードするクラスのメソッドを参照してください。

エンコード:

+ (NSString *)stringWithBase64EncodedString:(NSString *)string;

- (NSString *)base64EncodedString;

デコード:

- (NSString *)base64DecodedString;
于 2014-10-16T06:52:42.650 に答える