2

このコードを使用して SMB パスをマウントします

urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];
NSURL *urlOfVolumeToMount = [NSURL URLWithString:urlStringOfVolumeToMount];
FSVolumeRefNum returnRefNum;
FSMountServerVolumeSync( (CFURLRef)urlOfVolumeToMount, NULL, NULL, NULL, &returnRefNum, 0L);

次に、いくつかのパスのコンテンツを取得します:

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

私の問題は、特別な文字を含む「コンテンツ」配列のすべてのパス(たとえばü)で、エンコードされた2文字が得られることです:üはu¨になります

を使用してバイトをログに記録する場合:

[contentItem dataUsingEncoding:NSUTF8StringEncoding];

それは私に与えます:u(75)と¨(cc88)である75cc88

私が期待したのは、utf-8 でエンコードされたü char です。バイト単位では、c3bc である必要があります

ISOLatin1 エンコーディング、MacOSRoman を使用してパスを変換しようとしましたが、コンテンツ パスに ü の代わりに 2 つの個別の文字が既に含まれている限り、どの変換でも 2 つの文字がエンコードされます...

誰かが助けてくれるなら、ありがとう

私の設定: フランス語にローカライズされ、Snow Leopard を使用しています。

4

2 に答える 2

0
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];

何らかの理由で特に MacRoman が必要な場合を除き、ここではおそらく UTF-8 を使用する必要があります。

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

私の問題は、特別な文字を含む「コンテンツ」配列のすべてのパス(たとえばü)で、エンコードされた2文字が得られることです:üはu¨になります

構成された文字と分解されたシーケンスを期待しています。

ファイルシステムからパス名を取得しているので、これは問題ではありません: パス名は受け取ったとおりに正しく、Unicode を正しく処理するものにパス名を渡す限り、それらも正しく表示されます。 .

于 2010-11-06T21:13:19.033 に答える