我使用的是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
有什么建议吗?我将不胜感激任何帮助!
答案 0 :(得分:6)
好像你的字符串得到了双重UTF-8编码,因为“München中的Künstlerhaus”实际上是 UTF-8,如果再次UTF-8解码那么你应该得到正确的字符串
请记住,你不应该对这个结果感到满意。有些组合不能通过双UTF-8解码简单地解码双UTF-8编码的字符串。某些编码组合是不可逆的。所以在你的情况下,我建议你找出为什么字符串首先得到双重UTF-8编码,可能是在硬盘上以错误的编码存储,或者libical使用错误的字符集来访问它,或者如果你从服务器获得ical,也许字符集有错误的文本/ ical等等......
答案 1 :(得分:0)
C字符串似乎不是用UTF-8编码的,因为每个字符有四个字节。例如,ü
将在UTF-8中编码为\xc3\xbc
(或\195\188
)。因此,当您收到输入或使用其他编码时输入已经是乱码。