Цель C - символ с умлаутом для NSString - PullRequest
4 голосов
/ 10 февраля 2012

Я использую 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 ]

6 голосов
/ 10 февраля 2012

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

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

0 голосов
/ 10 февраля 2012

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

...