0

パス文字列を使用してNSURLを構築しようとしています。文字列は問題ないように見えますが、NSURLに入れようとすると、大量のジブリッシュが発生します。これが私がURLを構築するために使用しているコードです:

NSString* path = [[AppSettings instance].contentRootPath stringByAppendingPathComponent: item.fileName];
NSLog(path);
item.contentPath = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(item.contentPath.absoluteString);

そしてここにログがあります:

2012-07-25 10:28:39.983 mxHub [44036:207] /Users/casey.borders/Library/Application Support / iPhone Simulator / 5.0 / Applications / C2C1975D-7FAB-4E6C-A091-DC389223CC57 / Documents / .content / PREZISTA-PI.pdf

2012-07-25 10:28:41.654 mxHub [44036:207]/Users/casey.borders/Library/Application扡潳畬整瑓楲杮䄀䅖獳瑥慃档e獡敳䍴捡敨楗桴剕穩佥䕦瑮祲潆䭲祥:ㅱ䀲㨰䀴8敲潭敶湅牴䙹牯敋㩹挀牵敲瑮楓洀硡楓敺䀀䄢䅖獳瑥慃档䥥瑮牥越≬䄀䅖獳瑥慃档䥥瑮牥祳潃癮牥楳湯:慣䉮䍥湯敶瑲摥目に湅潣楤杮:湩瑩楗桴慄慴攺最後摯湩㩧攀瑸湥敤䱤䱤杯慄慴䄀偖慬敹䥲整䅭捣獥䱳杯開捡散獳潌䅧実祡攀敶瑮s灟慬敹䥲褭整湲污"噁平衡祡牥瑉浥捁散獳潌䥧瑮牥隆l潬䅧長祡䄀偖慬敹䥲衅捣獥䱳摮ベンチマーク瑡摥楂牴瑡e扯敳癲摥楂牴瑡e畮扭牥晏祂地味慲獮敦地摥渀浵潲卦慴汬摡摥畄慲楴湯瀀慬批捡卫慴瑲晏獦瑥瀀慬批捡卫獥楳湯䑉渀浵佲卦牥瑓牡䑴瑡e畮扭牥晏敓浧湥獴潄湷潬摡摥開汰祡牥瑉浥捁散獳噁平衡祡牥瑉浥捁散獳潌䕧敶瑮湉整湲污搀t┊@噁師祡牥瑉浥牅潲䱲杯。牥潲䑲浯楡n牥潲卲慴畴䍳摯e灟慬敹䥲整䕭から牯潌䕧敶瑮䀀䄢偖慬瑉浥牅潲䱲杯癅湥䥴瑮牥隆l椀剳捥牯楤杮攀から牯楗桴潄慭湩挺摯㩥獵牥湉潦撥灵楴湯:潶ベンチマーク䍥湯牴汯敬䕲摮敒潣摲湉整から灵楴湯:潶ベスト䍥湯牴汯敬偲慬批捡䉫晵敦䅲慶汩潲汬牥楄卤慴瑲平衡祡湩㩧連結捣獥晳汵祬:upport /iPhone㈜ǪᶀЀꀠ/Āࠀ쵠۴imulator/5。0 / Applications / C2C1975D-7FAB-4E6C-A091-DC389223CC57 / Documents / .content / Demo.pdf

4

2 に答える 2

4

それはNSLogと関係があり、URLとは何の関係もありません:)

これを試して :

NSString* path = [[AppSettings instance].contentRootPath stringByAppendingPathComponent: item.fileName];
NSLog(@"%@", path);
item.contentPath = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", item.contentPath.absoluteString);

の最初のパラメータNSLogはフォーマット文字列です。これは、出力に挿入する他の値がある可能性があることをNSLogに通知します(これらはNSLogが取る他のオプションのパラメータです-たとえばNSLog(@"%i", 5);、%iを5に置き換えます)。

NSLog(path);パスに特別なフォーマット文字がないため、期待どおりに出力されるため、これで問題ありません。

2番目のNSLog文字は%文字です-パスを%エスケープするように要求したときに追加しました:)たとえば、「アプリケーションサポート」のスペースを。に置き換えました%20

これは、URLにフォーマットコードが含まれていることを意味します%20S(Sはスペースの次の文字であり、「サポート」という単語の最初の文字です)。

%S'によって解釈さNSLogれます'私が与えられた次のパラメータを取り、それをnullで終了するc-stringとして扱います'。

残念ながら、あなたはNSLog別のパラメータを与えませんでした:)しかし、NSLogそれは知りませんでした-言われたとおりに忠実に行い、スタックの次の値を取得して出力文字列に追加しました。

スタックの次の値はガベージです。これが、出力がガベージである理由です。

パス内のスペースの代わりに破損した値が表示されることがわかります。両方のスペースの後にSが続くためNSLog、2か所にゴミが捨てられています。そのため、最初のガベージのロード後は「upport / iPhone」、2番目の「imulator/5.0」の後に表示されます:)

于 2012-07-25T14:51:43.097 に答える
2

NSLog(string)を使用すると、その文字列はフォーマットステートメントとして扱われ、「%」文字が解釈されます。

NSLog(@ "%@"、string)の形式を使用して、文字列を出力してみてください。一般的なステートメントとして、常に上記のフォームを使用する必要があり、使用しているフォームは使用しないでください。

于 2012-07-25T14:51:35.857 に答える