代码之家  ›  专栏  ›  技术社区  ›  carlos

Unicode字符不显示

  •  7
  • carlos  · 技术社区  · 16 年前

    我想使用

    CGContextSelectFont(context, "HelveticaNeue", textSize, kCGEncodingMacRoman);    
    CGContextShowTextAtPoint(context, myCenter.x, myCenter.y + textHeight, [sName     cStringUsingEncoding:NSMacOSRomanStringEncoding], [sName length]); 
    

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

    4 回复  |  直到 16 年前
        1
  •  12
  •   Jason Coco superfell    16 年前

    事实证明,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。见下表 http://daringfireball.net/misc/2007/07/iphone-osx-fonts 有关iPhone上可用字体的详细信息。

        2
  •  2
  •       16 年前

    值得注意的是,您仍然可以将CGContext函数与-[NSString drawWithRect:]及其同类函数一起使用。例如,以下代码使用50%不透明黑色绘制字符串(可以包括任何字符,包括启动此线程的无穷大符号):

    CGContextSaveGState(context);
    CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
    [self.text drawInRect:targetRect withFont:self.font];
    CGContextRestoreGState(context);
    
        3
  •  1
  •   Ian Vink    12 年前

    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 ()
    
        4
  •  0
  •   miguel.de.icaza    15 年前

    您希望避免drawInRect:withFont:(在MonoTouch中:DrawString(string、RectangelF、UIFont字体)作为此API,直到iPhoneOS 4.0不呈现可能包含某些unicode字符的字符串(如Dingbat)并将在该点无声地剪切呈现。

    相反,您必须使用drawInRect:withFont:lineBreakMode:alignment:(在MonoTouch中,这是DrawString(string msg、RectangleF rect、UIFont font、UILineBreakMode breakMode、UITextAlignment)方法),因为这样可以正确渲染。

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

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