Unicode字符不显示

时间:2008-11-09 00:43:55

标签: iphone cocoa-touch encoding

我想使用

显示“无限”符号
CGContextSelectFont(context, "HelveticaNeue", textSize, kCGEncodingMacRoman);    
CGContextShowTextAtPoint(context, myCenter.x, myCenter.y + textHeight, [sName     cStringUsingEncoding:NSMacOSRomanStringEncoding], [sName length]); 

显示为方框或圆形。我发现这个符号是十六进制176和221E十六进制格式。我使用Helvetica作为我的字体,并尝试过其他没有运气的人。这是我正在使用的编码问题吗?

4 个答案:

答案 0 :(得分:12)

事实证明,CGContextSelectFont仅支持MacRoman编码,它基本上只有一小组字符。为了在字符串中显示Unicode字符,您必须使用CGSetFont或Cocoa绘图系统。 CGSetFont要求您始终使用Cocoa将字符映射到字形,然后使用CGContextShowGlyphsAtPoint绘制字形。如果你真的需要显示Unicode字符,我建议你研究绘制这些字符串的其他方法。

此代码基本上将显示无穷大符号:

- (void)drawRect:(CGRect)rect {
    unichar inf = 0x221E; // infinity symbol
    NSString* sName = [[NSString alloc] initWithCharacters:&inf length:1];
    UIFont* font = [UIFont fontWithName:@"Helvetica" size:32.0];
    [sName drawInRect:CGRectMake(20, 20, 40, 40)
             withFont:font];
    [sName release];
}

另请注意,在iPhone(以及Mac)上,Helvetica Neue实际上并不存在......它的名称只是映射回标准的Helvetica。有关iPhone上可用字体的详细信息,请参阅http://daringfireball.net/misc/2007/07/iphone-osx-fonts上的表格。

答案 1 :(得分:2)

值得注意的是,您仍然可以使用CGContext函数 - [NSString drawWithRect:]及其表兄弟。例如,以下代码使用50%-opaque black绘制一个字符串(可以包含任何字符,包括启动此线程的无穷大符号):

CGContextSaveGState(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
[self.text drawInRect:targetRect withFont:self.font];
CGContextRestoreGState(context);

答案 2 :(得分:1)

这是MonoTouch的答案:

UIGraphics.PushContext (mBmpContext);
mBmpContext.SetRGBFillColor(1f,1f,1f,1f);
var font = UIFont.FromName ("Arial", 30);
using (var nsstr = new NSString ("äöü ÜÖÄ")){
   nsstr.DrawString (new PointF (10, 400), font);
}
UIGraphics.PopContext ()

答案 3 :(得分:0)

你想避免使用drawInRect:withFont :(在MonoTouch中:DrawString(字符串,RectangelF,UIFont字体)作为此API,直到iPhoneOS 4.0不呈现可能包含某些unicode字符(如dingbats)的字符串,并且将静默地剪切渲染那时候。

相反,您必须使用drawInRect:withFont:lineBreakMode:alignment :(在MonoTouch中,这是DrawString(字符串msg,RectangleF rect,UIFont字体,UILineBreakMode breakMode,UITextAlignment align)方法),因为这可以正确呈现。

此外,并非iPhone上的所有字体都是完整的字体集,您可以使用以下参考:

http://daringfireball.net/misc/2007/07/iphone-osx-fonts

有关包含完整字符集的字体列表。