4

我正在使用 libical,它是一个解析 icalendar 格式(RFC 2445)的库。
问题是,例如在位置字段中可能存在一些德语变音符号。
现在 libical 为每个值返回一个 const char *,例如:

"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

似乎您的字符串进行了双重 UTF-8 编码,因为“Künstlerhaus in München”实际上UTF-8,如果您再次对其进行 UTF-8 解码,您应该得到正确的字符串。

请记住,您不应该对该结果感到满意。在某些组合中,不能简单地通过执行双 UTF-8 解码来解码双 UTF-8 编码的字符串。一些编码组合是不可逆的。因此,在您的情况下,我建议您首先找出为什么字符串会被双重 UTF-8 编码,可能 ical 以错误的编码存储在硬盘上,或者 libical 使用错误的字符集来访问它,或者如果您从服务器获取 ical,则文本 / ical 等的字符集可能是错误的......

于 2012-02-10T10:59:42.353 回答
0

C 字符串似乎没有以 UTF-8 编码,因为每个字符都有四个字节。例如ü将在 UTF-8 中编码为\xc3\xbc(或)。\195\188因此,输入要么在您收到时已经出现乱码,要么使用了其他编码。

于 2012-02-10T10:53:16.650 回答