1

RTFD文字列(通常は短い)をXMLファイルに埋め込む必要があります。

XMLWriter writer(...)

NSAttributedString *ns=.....
NSRange all=NSMakeRange(0,[s length]);
NSData *rtfd=[s RTFDFromRange:all documentAttributes:nil];

writer.Write(rtfd);

RTFDは、データバイトがCDATAとしても安全である、または実際にUTF8として表現できるという保証を私たちに与えません(私が理解しているように-標準のドキュメントを見つけることができないようです)。それらをどのようにエンコードする必要がありますか?

目的は次のとおりです。

  • 人間の読みやすさ
  • コンパクトさ
  • エンコードとデコードの速度

明らかに妥協が必要かもしれませんが。

4

2 に答える 2

0

更新: これは実際にはRTFでのみ機能し、RTFDでは機能しません。つまり、の場合、最後[ns containsAttachments]にを作成できない可能性があります。rtfString


RTFDを作成するときにいくつかのオプションを指定して、UTF8エンコーディングで取得できます。

このコードは私たちにとってうまく機能しています(プロパティリストのシリアル化を使用していますが):

NSAttributedString *ns = ...;
NSError *error = nil;
NSString *rtfString = nil;
NSData *rtfdData = [ns dataFromRange:NSMakeRange(0, [ns length])
                   documentAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                       NSRTFDTextDocumentType, NSDocumentTypeDocumentOption,
                                       [NSNumber numberWithInt:NSUTF8StringEncoding], NSCharacterEncodingDocumentAttribute,
                                           nil]
                                error:&error];
if (error == nil) {
    rtfString = [[[NSString alloc] initWithData: rtfdData encoding:NSUTF8StringEncoding] autorelease];
}

それで、writer.Write(rtfString);

于 2013-02-28T00:17:47.273 に答える
0

あまり良い答えはないようです。

descriptionプロパティ リスト シリアライザーによって使用される NSDataのメソッドは、16 進ダンプを書き込みます。これは信頼性が高く、XML に対して安全ですが、コンパクトでも読みやすくもありません。

私は現在 Base64 エンコードを使用しています。これはコンパクトではなく (16 進数よりも優れています)、判読できませんが、XML に対して完全に安全です。

UTF8 は Base256-37=Base219 エンコーディングに容易に適合するはずであるという ISTM では、制御文字 00-31 と、XML で特殊な文字 ( < > " ' & ) を省略しています。これにいい名前?

于 2013-03-01T16:09:30.303 に答える