UTF8String производит буквальный символ фунта ¬ £ target-c - PullRequest
1 голос
/ 06 марта 2011

По какой-то причине, когда я пытаюсь распечатать символ валюты в PDF-документе в своем приложении для iPhone, я могу печатать ¬ £ вместо £. (Символ фунта используется, когда на iPhone установлены британские настройки).

Это мой код:

text = [NSString stringWithFormat:@"%@", [Helper convertDoubleToCurrencyString:[item.Total floatValue]]]; 
                                            WriteOutTextInPDF(pdfContext, [text UTF8String], priceX, currentY, 16);

+(NSString*) convertDoubleToCurrencyString:(double) d{
    NSDecimalNumber *decimal = (NSDecimalNumber*)[NSDecimalNumber numberWithDouble:d];
    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    return [currencyFormatter stringFromNumber:decimal];
}

void WriteOutTextInPDF(CGContextRef pdfContext, const char *text, int x, int y, int fontSize){
    CGContextSelectFont (pdfContext, "Helvetica", fontSize, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
    CGContextSetRGBFillColor (pdfContext, 0, 0, 0, 1);
    CGContextShowTextAtPoint (pdfContext, x, y, text, strlen(text));
}

Есть идеи, как я получаю символ вместо этого представления?

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 06 марта 2011

В тексте UTF-8 символ £ представлен двумя байтами 0xc2 0xa3. Но в Mac Roman кодировке эти два байта представляют два символа ¬ и £.

Вы можете использовать [text cStringUsingEncoding:NSMacOSRomanStringEncoding] вместо [text UTF8String] для преобразования строки с использованием ожидаемой кодировки CGGraphics. Или вы можете попробовать использовать UIGraphicsPushContext и функции рисования строки UIKit , чтобы нарисовать строку с UIKit, который может поддерживать UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...