RTFString Содержит NSASCIIStringEncoding Специальные символы? - PullRequest
1 голос
/ 01 августа 2010

В моем интерфейсе какао есть строка, которая должна иметь специальное форматирование (шрифты, цвета и т. Д.). Естественно, я использую приписанную строку. Для удобства я инициализирую строку как RTF:

NSString *inputString = @"This string has special characters";
NSString *rtfString = [NSString stringWithFormat:@"{@"***LENGTHY RTF FORMATTING STRING *** %@", inputString];
NSAttributedString *testString = [[NSAttributedString alloc] initWithRTF:[rtfString dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:nil];

Проблема в том, что у «inputString» могут быть специальные символы, которые не отображаются должным образом из-за кодировки UTF8. Они заменены другими символами. é остается как Å ©.

Итак, сейчас я делаю это:

NSData* intermediateDataString=[inputString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

inputString = [[[NSString alloc] initWithData:intermediateDataString encoding:NSUTF8StringEncoding] autorelease];

Не отображает неожиданные символы, но удаляет все акценты и оставляет вместо них букву без акцента - é остается как e

Это улучшение, поскольку все можно прочитать, но оно далеко от идеального.

Мысли

Ответы [ 2 ]

1 голос
/ 01 августа 2010

Я бы сделал что-то подобное. Сначала создайте фиктивную атрибутивную строку:

NSString *dummyRTFString = @"***LENGTHY RTF FORMATTING STRING *** A";
NSAttributedString *dummyAS = [[NSAttributedString alloc] 
                                      initWithRTF:[rtfString dataUsingEncoding:NSUTF8StringEncoding] 
                               documentAttributes:nil];

и получите атрибуты:

NSDictionary*attributes=[dummyAS attributesAtIndex:0 effectiveRange:NULL];
[dummyAS release];

Теперь я буду использовать этот атрибут для создания еще одной приписанной строки:

NSAttributedString* as=[[NSAttributedString alloc] initWithString:inputString attributes:attributes];

Другой подход заключается в использовании HTML вместо RTF; тогда вы можете включить в него символы не-ascii как юникод.

0 голосов
/ 01 августа 2010

В вашей первой строке кода я предполагаю, что это действительно @"This string has special characters", иначе вы получите ошибку компиляции. И похоже, что ваша вторая строка имеет дополнительные @".

Если вы знаете, что используете UTF-8, зачем говорить: NSASCIIStringEncoding?

Действительно, вы должны поместить RTF, включая строку со специальными символами, в ресурс, не встроенный в ваш код.

...