Хорошо, я сдаемся ... (Я использую cocos2d-й в окр IOS сейчас)CCLabelBMFont, кодировки и специальные символы
Я строй игры, где я должен читать строки (потенциально немецкими , Французский и т. Д.) Из текстового файла и отображать их в ярлыках.
Я начал, используя стандартный ifstream, чтобы прочитать файл, и все отлично работало для чистого текста на английском языке. Когда я попробовал немецкий (содержащие умляуты), однако, приложение не будет работать на
CCAssert(c < kCCBMFontMaxChars, "LabelBMFont: character outside bounds");
с в этом случае может равняться 65468, который, безусловно, не символ, я хочу, чтобы отобразить.
Так следуя другой намек я изменил предыдущую линию в CCLabelBMFont.cpp к
unsigned long c = m_sString[i];
от беззнаковых коротких с = m_sString [I]; , который заставляет Assert больше не сбой, но все же производит искаженный вывод.
Так что я немного потрудился с отказом от ifstream и использованием методов Cocoa для чтения файла. После нескольких проб и ошибок я обнаружил, что объединение выше исправления со следующим методом чтения файла на самом деле сделал трюк
NSString *readString = [NSString stringWithContentsOfFile:[NSString stringWithCString:fileName encoding:NSUTF8StringEncoding] encoding:NSUTF8StringEncoding error:&error];
std::string cc2dxString ([readString cStringUsingEncoding:NSISOLatin1StringEncoding]);
... пока я не попробовал то же самое с французским файлом (содержащих символы с диакритическими знаками), который снова произвел искаженную продукцию.
Поскольку это решение было уродливым, чтобы начать с того, что я теперь чувствую необходимость спросить: я делаю это совершенно неправильно или есть на самом деле какой-то свойственный недостаток в реализации cocos2d-x CCLabelBMFont?
GitHub Как бы я заменить, если тест так: 'для (NSUInteger я = 0; я <[длина м]; я ++) { \t \t unichar c = [m characterAtIndex: i]; \t \t, если (с> = kCCBMFontMaxChars) { \t \t \t м = [м stringByReplacingCharactersInRange: NSMakeRange (я, 1) withString: @ "'"]; \t \t} \t} ' – marciokoko
Извините, но я понятия не имею, что вы пытаетесь задать здесь. Сейчас вы заменяете неподдерживаемые символы апострофами. Что ты хочешь делать? – fleshgolem
kCCBMFontMaxChars возвращает предупреждение в cocos2d версии 2.0. я думаю, что это было устарело. так как я могу заменить его в этом случае, если тест? – marciokoko