2012-08-09 76 views
1

我試圖將Unicode字符(使用自定義字體)放入一個字符串中,然後使用Quartz顯示,但XCode因爲某些原因不喜歡轉義碼,而且我確實卡住了。XCode中的Unicode字符無效

CGContextShowTextAtPoint (context, 15, 15, "\u0066", 1); 

它不喜歡這樣(拉丁語小寫f)並且說它是一個「無效的通用字符」。

CGContextShowTextAtPoint (context, 15, 15, "\ue118", 1); 

它不會抱怨這個,但什麼都不顯示。當我在FontForge中打開字體時,它會在那裏顯示字形並且有效。此外字體書驗證字體就好了。如果我在TextEdit中使用字體,並將Unicode字符與字符查看器Unicode表一起放入,它看起來很好。 Just Quartz將不會顯示它。

任何想法爲什麼這不起作用?

+0

嘗試大寫E. ..如「' \ uE118'「 – 2012-08-09 14:36:05

+0

不好運我恐怕 – 2012-08-09 14:40:01

+1

這個問題可能會有所幫助:http://stackoverflow.com/question s/1237565/iphone-cgcontextshowtextatpoint-for-japanese-characters – trojanfoe 2012-08-09 14:53:56

回答

0

我只是改變了字體在最後使用標準的字母數字字符。簡單得多。

1

「無效通用字符」錯誤是due to the definition in C99:基本上\uNNNN轉義應該允許一個程序員調用變量føø和其他編程器(可能無法O型誰)是指它作爲f\u00F8\u00F8。爲了讓每個人都更容易解析,你不能使用\u轉義來處理「基本字符集」中的控制字符或字符(也許是從Java's unicode escapes中學到的一個教訓,它可以做結束註釋等瘋狂事情)。

第二個錯誤可能是因爲"\ue118"正在編譯爲UTF-8序列"\xee\x8e\x98" - 三個char s。 CGContextShowTextAtPoint()假設一個char(字節)是一個字形,CGContextSelectFont()僅支持編碼kCGEncodingMacRoman(將字節解碼爲「Óéò」)和kCGEncodingFontSpecific(發生什麼是任何人的猜測。文檔說不使用CGContextSetFont()(它沒有指定炭到符號的映射)連同CGContextShowText()CGContextShowTextAtPoint()

如果您知道字形數,你可以使用CGContextShowGlyphs()CGContextShowGlyphsAtPoint(),或者CGContextShowGlyphsAtPositions()

相關問題