1

NSString には、多言語サポートに関する奇妙なバグがあると思います。

私はiOS SDK 6.0で開発しており、シミュレーターとiPhoneの両方で同じ問題を抱えています。

これは私のコードです。

 NSString* localPath = [documentsPath stringByAppendingPathComponent:filename];
 NSLog(@"%@",localPath);
 NSLog(@"%@",@"/Users/vicjames/Library/Application Support/iPhone Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/해부학/11월 29일/095. Michael Learns to Rock - 25 Minutes.mp3");

 NSLog(@"localPath Length:%d",[localPath length]);
 NSLog(@"String Length:%d",[@"/Users/vicjames/Library/Application Support/iPhone Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/해부학/11월 29일/095. Michael Learns to Rock - 25 Minutes.mp3" length]);


 NSLog(@"localPath : URL: %@",[[NSURL fileURLWithPath:localPath] absoluteString]);
 NSLog(@"String URL: %@",[[NSURL fileURLWithPath:@"/Users/vicjames/Library/Application Support/iPhone Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/해부학/11월 29일/095. Michael Learns to Rock - 25 Minutes.mp3"] absoluteString]);

以下のログはコードの実行結果です。

2012-12-23 00:11:57.741 AudioArchive[11702:c07] /Users/vicjames/Library/Application Support/iPhone Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/해부학/11월 29일/095. Michael Learns to Rock - 25 Minutes.mp3
2012-12-23 00:11:57.741 AudioArchive[11702:c07] /Users/vicjames/Library/Application Support/iPhone Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/해부학/11월 29일/095. Michael Learns to Rock - 25 Minutes.mp3

2 つの文字列が同じように見えます。

2012-12-23 00:11:57.742 AudioArchive[11702:c07] localPath Length:194
2012-12-23 00:11:57.742 AudioArchive[11702:c07] String Length:186

でも長さが違います。

2012-12-23 00:11:57.743 AudioArchive[11702:c07] localPath : URL: file://localhost/Users/vicjames/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/%E1%84%92%E1%85%A2%E1%84%87%E1%85%AE%E1%84%92%E1%85%A1%E1%86%A8/11%E1%84%8B%E1%85%AF%E1%86%AF%2029%E1%84%8B%E1%85%B5%E1%86%AF/095.%20Michael%20Learns%20to%20Rock%20-%2025%20Minutes.mp3
2012-12-23 00:11:57.743 AudioArchive[11702:c07] String URL: file://localhost/Users/vicjames/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/8186A14C-1482-44AB-AD3A-0A88DC40EC89/Documents/Data/%ED%95%B4%EB%B6%80%ED%95%99/11%EC%9B%94%2029%EC%9D%BC/095.%20Michael%20Learns%20to%20Rock%20-%2025%20Minutes.mp3

URL エンコーディングが違いを示しています。

2012-12-23 00:11:57.745 AudioArchive[11702:c07] is Not Equal

また、NSString は、2 つの文字列が等しくないことを示しています。

  1. なぜこのようなことが起こっているのか知りたいです。
  2. 内部 NSString エンコーディングを検討する必要がありますか?
  3. 必要な場合、内部エンコーディングを変換または処理するにはどうすればよいですか?
4

1 に答える 1

2

iOS ファイルシステム名は正規化形式 Dですが、文字列リテラルは正規化形式 C です。

最初に C を形成するように正規化することで、同じ長さを得ることができます。

NSLog(@"localPath Length:%d",[[localPath precomposedStringWithCanonicalMapping] length]);
于 2012-12-23T10:31:35.923 に答える