4

icalendar形式(RFC 2445)を解析するためのライブラリであるlibicalを使用しています。
問題は、たとえばロケーションフィールドにドイツ語のウムラウトが存在する可能性があることです。
これで、libicalは次のような値ごとにconstchar*を返します。

"K\303\203\302\274nstlerhaus in M\303\203\302\274nchen"  

私はそれをNSStringに変換しようとしました:

[NSString stringWithCString:icalvalue_as_ical_string_r(value) encoding:NSUTF8StringEncoding];

しかし、私が得るものは次のとおりです。

Künstlerhaus in München

助言がありますか?助けていただければ幸いです!

4

2 に答える 2

6

「KünstlerhausinMünchen」は実際にUTF-8であるため、文字列が二重にUTF-8でエンコードされているようです。UTF-8でデコードすると、正しい文字列を取得する必要があります。

ただし、その結果に満足するべきではないことを覚えておいてください。二重UTF-8でエンコードされた文字列は、二重UTF-8デコードを実行しても単純にデコードできない組み合わせがあります。一部のエンコーディングの組み合わせは元に戻せません。したがって、あなたの状況では、文字列が最初に二重にUTF-8でエンコードされた理由、おそらくicalがハードディスクに間違ったエンコードで保存されている理由、またはlibicalがアクセスに間違った文字セットを使用している理由を調べることをお勧めしますそれ、またはサーバーからicalを取得している場合は、おそらくそこにある文字セットがtext/icalなどに間違っています...

于 2012-02-10T10:59:42.353 に答える
0

各文字に4バイトあるため、C文字列はUTF-8でエンコードされていないようです。たとえば、UTF-8では(または)üとしてエンコードされます。したがって、入力は受信時にすでに文字化けしているか、他のエンコーディングを使用しています。\xc3\xbc\195\188

于 2012-02-10T10:53:16.650 に答える