2012-03-12 77 views
0

好吧,我放棄了......(我使用了cocos2d-x在iOS的ENV現在)CCLabelBMFont,編碼和特殊字符

我建立一個遊戲,我要讀的字符串(潛在德國,法文等)從文本文件中顯示出來並顯示在標籤中。

我開始使用標準的ifstream來讀取文件,並且一切工作正常純英文文本。當我試圖德國(含變音),但是,應用程序在這種情況下

CCAssert(c < kCCBMFontMaxChars, "LabelBMFont: character outside bounds"); 

C未能可能等於65468,這絕對不是一個角色,我想顯示。

所以以下其他提示我改變前一行中CCLabelBMFont.cpp到

unsigned long c = m_sString[i]; 

從 無符號短C = 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實現中的一些固有缺陷?

回答

1

原來,CCLabelBMFont確實是這個問題。

你可以從他們的github庫

+0

得到具有完全的UTF-8支持一個版本將如何我替換如果測試是這樣的:'用於(NSUInteger I = 0; I <[米長度];我++){ \t \t unichar c = [m characterAtIndex:i]; \t \t如果(C> = kCCBMFontMaxChars){ \t \t \t M = [M stringByReplacingCharactersInRange:NSMakeRange(I,1)withString:@ 「'」]; \t \t} \t}' – marciokoko 2013-06-11 02:41:48

+0

對不起,但我不知道你在這裏要問什麼。現在你用撇號替換不受支持的字符。您想做什麼? – fleshgolem 2013-07-02 08:25:51

+0

kCCBMFontMaxChars在cocos2d v2.0中返回警告。我認爲它已被棄用。所以如果測試,我將如何取代它? – marciokoko 2013-07-02 14:31:58