2016-08-14 7 views
0

私のNSStringには、アクセント付きの文字とhtmlタグがあります(<i></i>など)。私はNSTextFieldにそれらにテキスト属性を付けて表示したいと思います。私はattrStrを構築する場合NSMutableAttributedStringを使用してアクセント付き文字を表示する方法は?

、私が使用します。

NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithHTML:[text dataUsingEncoding:NSUTF8StringEncoding] 
                    options:@{NSWebPreferencesDocumentOption : webPreferences} 
                 documentAttributes:NULL]; 

私は次のようにテキストを表示:

someTextField.attributedStringValue = attrStr; 

しかし、これは私がNSStringのエンコーディングを知っている必要はなく、問題があることです私はエンコーディングを知らない。では、エンコーディングを知らずに属性文字列を作成するにはどうすればよいですか?

答えて

0

NSStringのエンコーディングを知る必要はありません。これはObjective-C文字列です。 dataUsingEncoding:状態の定義は、強調を追加:

が所与の符号化を使用してエンコードレシーバの表現を含むNSDataオブジェクトを返します。

このメソッドは、どんなエンコーディングNSStringから変換し、内部に指定されたエンコーディングを使用しています - その結果は、あなたの場合は、UTF8文字列のバイトを含むNSDataです。

無効な結果が表示される場合は、元のNSStringを作成するときに問題が発生する可能性がありますか?

HTH

補遺は、私は今(私は答えを追加 - 基本的にあなたが知っているかを推測する必要があります)あなたが最初this questionを尋ねご覧ください。最初にファイルをNSStringに読み込んでいるのはなぜですか? NSDataに直接読み込んだ後、HTMLパーサーで並べ替えてみましょう(HTMLエンコーディングタグを読み込むか、エンコーディングをデフォルトにします)。

+0

まあ、それほど単純ではありません。 NSDataとして読み込んだ場合、NSDataを解析して特定の時間範囲の字幕文字列を抽出することはできません。しかし、文字列でファイルを読み込むために、私はエンコーディングを知る必要があります。たぶん、VLCのソースコードを見て、どうやってこれを行うのか見てみる必要があります。 VLCは、字幕テキストで使用されているエンコーディングに関係なく、字幕を正しくデコードしているようです。 – Kuro

+0

簡単なDuckDuckGoの示唆SRTファイルのエンコーディングは定義されていませんが、VLCはこれを「非公式にUnicode」と表現していますが、ソースとしては助けになるかもしれません。あなたのための時間はいくつかの研究にかかります。いい狩猟! – CRD

+0

VLCはすべてを正しくデコードしませんが、Mac Blu-Ray Playerは正しく動作します。 – Kuro

0

最終的に、私が上記のNSUnicodeStringEncodingを使用すると、アクセント記号が正しく表示されることがわかりました。

関連する問題