Objective C - 带有umlaute到NSString的char

时间:2012-02-10 10:24:46

标签: objective-c ios cocoa-touch diacritics libical

我使用的是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

有什么建议吗?我将不胜感激任何帮助!

2 个答案:

答案 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)。因此,当您收到输入或使用其他编码时输入已经是乱码。