4

特定の NSString が NFD 形式であるかどうかを判断する必要があります。それ、どうやったら出来るの?

環境 :

Mac OS から (NSString の形式で) 取得したファイル パスは、正規分解形式 (NFD) です。これは特に、ファイルシステムが HFSPlus の場合に当てはまります。 http://developer.apple.com/mac/library/technotes/tn/tn1150.html#CanonicalDecomposition

これから事前に構成された文字列が必要です。precomposedStringWithCanonicalMappingここで、ファイル名が NFD 形式で分解されていることがわかっている場合にのみ、関数を実行したいと考えています。

私が考えることができる解決策:

//works on the idea that NFD(NFD(x)) = NFD(x)
BOOL IsCanonicallyDecompsed(NSString *initialFilePath) {
  //decompose the string to NFD form
  NSString *nfdFormOfStr = [initialFilePath decomposedStringWithCanonicalMapping];
  char *ndfFormUTF8 = [nfdFormOfStr  UTF8String];
  char *intialPathUTF8 = [initialFilePath UTF8String];
  return (strcmp(ndfFormUTF8, intialPathUTF8) == 0);
}

私の解決策は大丈夫ですか?また、ファイルシステムの出力 (NFD で) についての私の理解は正しいですか?

4

1 に答える 1

3

構成済み文字列 (NFC) が必要な場合、最も簡単で安全なprecomposedStringWithCanonicalMappingのは、文字列が NFD であるかどうかに関係なく、常に を実行することです。たとえば、一部の文字が事前に構成され、一部が分解された文字列を取得する可能性があります。

HFS+ ファイルシステムは修正版の NFD を使用していることに注意してください。このバージョンでは、Mac OS 9 との互換性のために一部のコードポイント範囲が事前に構成されています。decomposedStringWithCanonicalMapping関数が HFS+ と同じルールを使用しているかどうかはわかりません。

于 2013-01-09T03:10:40.050 に答える