1

CGContextShowTextAtPoint呼び出しを使用して、ビューに°またはµを出力しています。コードの行は次のとおりです。

int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°", number];
CGContextShowTextAtPoint(context, 10, 5, [theText2 cStringUsingEncoding:NSUTF8StringEncoding], [theText2 length]);

これの出力は次のようになります

「100¬」

印刷する文字列の長さを長くすると、次のように表示されます。

「100°」

期待される出力は次のとおりです。

「100°」

これは確かにUnicode文字の印刷と関係があります。

4

2 に答える 2

1

CGContextShowTextAtPoint文字列をで指定されたエンコーディングに変換する必要があるためですCGContextSelectFont。おそらくこれは「MacRoman」エンコーディングです。そして、の最後の引数はCGContextShowTextAtPoint変換された文字列の長さであり、NSString:の長さではありません。

CGContextSelectFont(context, "Helvetica", 10.0, kCGEncodingMacRoman);

int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°µ", number];
const char *s = [theText2 cStringUsingEncoding:NSMacOSRomanStringEncoding];
CGContextShowTextAtPoint(context, 10, 5, s, strlen(s));

これは、「MacRoman」文字セットの文字を使用している場合にのみ機能することに注意してください。(また、Mac Romanエンコーディングの歴史的な変更により、ユーロ文字では機能しません。)

一般的なUnicode文字列の場合、このNSString方法のdrawAtPoint:withFont:方が適している可能性があります。

于 2012-12-06T12:38:56.430 に答える
0

エンコーディングに問題があることはわかっています。しかし、ここに小さな修正がありますこれを使用してくださいここで161は度の記号を表します

char str[20] = {0};
sprintf(str, "%d%c",number,161);
CGContextShowTextAtPoint(context, 10, 5, str, strlen(str));
于 2012-12-06T08:24:02.363 に答える