1

URLエンコーディングを行いたい。私の入力文字列は " ChBdgzQ3qUpNRBEHB+bOXQNjRTQ= "です

「 ChBdgzQ3qUpNRBEHB%2BbOXQNjRTQ%3D 」という出力が得られます。これは、エンコードされる場合を除いて完全に正しいです。

理想的には、得られる出力ではなく、 「 ChBdgzQ3qUpNRBEHB%2bbOXQNjRTQ%3d 」である必要があります。つまり、 %2B と %3Dの代わりに%2b と %3dを取得する必要がありました。

これはできますか?

私が使用したコードは次のとおりです。

NSString* inputStr = @"ChBdgzQ3qUpNRBEHB+bOXQNjRTQ=";
NSString* outputStr = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                          (CFStringRef)inputStr,
                                                                          NULL,
                                                                          (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                                                                          CFStringConvertNSStringEncodingToEncoding(encoding));
4

2 に答える 2

0

おそらくもっとエレガントだが遅い方法は、文字列をループして、文字列内の各文字を 1 つずつ変換することです (したがって、文字列の長さを取得してから、位置 0 から長さ 1 までの部分文字列を取得します。返された文字列の長さが 1 より大きい場合は、文字をCFURLCreateStringByAddingPercentEscapesエンコードし、大文字と小文字を安全に小文字に変換できます。

すべての場合において、返された (場合によっては変更された) 文字列を変更可能な文字列に追加します。これが完了すると、可能な文字列に必要なものが正確に得られます。これは実際にはプロセッサを大量に消費しているように見えますが、実際には、余分な消費サイクルに気付くことはないでしょう。

同様に、2 番目の方法は、最初に文字列全体を変換してから、バイトごとに変更可能な文字列にコピーし、「%」が見つかった場合は、次の 2 文字を小文字に変換することです。問題をスライスするためのわずかに異なる方法です。

于 2013-06-07T13:24:02.653 に答える