Цель C - символ с умлаутом в NSString

Я использую 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 ответа

Решение

Похоже, что ваша строка получила кодирование в двойном UTF-8, потому что "Künstlerhaus in München" на самом деле является UTF-8, если вы снова декодируете UTF-8, вы должны получить правильную строку.

Имейте в виду, однако, что вы не должны быть удовлетворены этим результатом. Существуют комбинации, в которых дважды кодированная UTF-8 строка не может быть просто декодирована путем двойного UTF-8-декодирования. Некоторые комбинации кодирования необратимы. Таким образом, в вашей ситуации я бы посоветовал вам выяснить, почему строка получила двойное кодирование в UTF-8, во-первых, возможно, значение ical хранится в неправильной кодировке на жестком диске, или libical использует неверный набор символов для доступа это, или если вы получаете файл с сервера, возможно, кодировка там не подходит для текстовых / текстовых, и т. д., и т. д...

Строка C, похоже, не кодируется в UTF-8, так как для каждого из символов есть четыре байта. Например ü будет закодирован как \xc3\xbc (или же \195\188) в UTF-8. Поэтому ввод либо искажен при получении, либо использует другую кодировку.

Другие вопросы по тегам