1

(カスタム フォントを使用して) Unicode 文字を文字列に入れようとしていますが、それを Quartz を使用して表示しますが、XCode は何らかの理由でエスケープ コードを好まず、本当に行き詰まっています。

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

これ (ラテン小文字の f) が気に入らず、「無効なユニバーサル文字」であると述べています。

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

これについて文句はありませんが、何も表示されません。FontForge でフォントを開くと、グリフが有効であると表示されます。また、Font Book はフォントを問題なく検証しました。TextEdit でフォントを使用し、文字ビューアの Unicode テーブルで Unicode 文字を入力すると、問題なく表示されます。クォーツだけでは表示されません。

これが機能しない理由はありますか?

4

2 に答える 2

1

「無効なユニバーサル文字」エラーは、C99 の定義によるものです。基本的に、\uNNNNエスケープは、あるプログラマーが変数 føøを呼び出し、別のプログラマー (ø を入力できない可能性があります) を として参照できるようにするものf\u00F8\u00F8です。誰にとっても簡単に解析できるようにするために、制御文字や「基本文字セット」にある文字にエスケープを使用することはできません(おそらく、 Java の Unicode エスケープ\uから学んだ教訓で、コメントを終了するなどのクレイジーなことを行うことができます)。

2 番目のエラーは、おそらく"\ue118"が UTF-8 シーケンスにコンパイルされているためです"\xee\x8e\x98"— 3 つcharの s. 1 (バイト)が1つのグリフであるとCGContextShowTextAtPoint()想定し、エンコーディング(バイトを「Óéò」にデコードする)および(何が起こるかは誰の推測でもあります。ドキュメントでは使用しないように言われています(これはchar-to-glyphを指定していませんマッピング)またはと組み合わせて使用​​します。charCGContextSelectFont()kCGEncodingMacRomankCGEncodingFontSpecificCGContextSetFont()CGContextShowText()CGContextShowTextAtPoint()

グリフ番号がわかっている場合はCGContextShowGlyphs()、 、CGContextShowGlyphsAtPoint()、またはを使用できますCGContextShowGlyphsAtPositions()

于 2013-04-23T18:57:21.763 に答える
0

最後に標準の英数字を使用するようにフォントを変更しました。はるかに簡単です。

于 2012-08-09T20:40:38.317 に答える