Цель 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. Поэтому ввод либо искажен при получении, либо использует другую кодировку.