Umlaute in const char

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Umlaute in const char

    Hallo,

    ich Programmiere gerade etwas mit CGContext für eine iPhone App und verzeifel gerade an den Umlauten.

    Quellcode

    1. const char *text = "Text für meine App. Habe es auch mit \x84 für ein ü versucht.";
    2. CGContextShowTextAtPoint (pdfContext, 50, 920, text, strlen(text)); // x , y


    So wie es bei C gemacht wird klappt es leider nicht. Die Umlaute gehen nicht sowie der Zeilenumbruch mittels \n. Mache ich irgendwas falsch oder muss ich noch eine Klasse nach laden oder so? Zur Zeit habe ich nur UIKit als Bib.

    Danke

    Gruß

    Bongartz
    Vielen Dank

    Gruß

    Bongartz
  • RE: Umlaute in const char

    Ich weiß nicht genau, was du vor hast, aber ich halte const char* für eine völlig falsche Idee.
    Was spricht gegen einen einfachen NSString?
    (allgemein gilt übrigens die Meinung, Umlaute hätten nichts im Quelltext verloren.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • hast du vorher mittels CGContextSelectFont(...) die richtige encoding gesetzt (in der du dein char-array dann angibst)?

    zb UTF8-encoding setzen und dann das char-array mittels [@"täst" UTF8String] zum Testen holen :)

    newlines wirst du selbs handlen müssen.

    btw: warum verwendest du die methoden und nicht andere die CFString bzw NSString akzeptieren?
  • da ich eine pdf mittels Quartz 2D erstelle muss ich leider diese Version nutzen. Da Quartz 2D nur C kann soweit ich weiß. Ich werde es mal mit der Codierung versuchen. Nur warum ich jetzt ein Array erstellen muss habe ich noch nicht so ganz verstanden.
    Vielen Dank

    Gruß

    Bongartz
  • Original von Bongartz
    da ich eine pdf mittels Quartz 2D erstelle muss ich leider diese Version nutzen. Da Quartz 2D nur C kann soweit ich weiß. Ich werde es mal mit der Codierung versuchen. Nur warum ich jetzt ein Array erstellen muss habe ich noch nicht so ganz verstanden.


    char * ist ein array!
  • Mh ok ich kenn mich mit dem alten guten C nicht so wirklich aus. Habe mir mehr auf Objetiv-C eingeschlossen:

    Hier mal der Code wie ich die PDF Datei erstelle, damit ein Vorgehen etwas mehr Sinn macht:

    Quellcode

    1. void CreatePDFFile (CGRect pageRect, const char *filename, const char *bildName) {
    2. // This code block sets up our PDF Context so that we can draw to it
    3. CGContextRef pdfContext;
    4. CFStringRef path;
    5. CFURLRef url;
    6. CFMutableDictionaryRef myDictionary = NULL;
    7. // Create a CFString from the filename we provide to this method when we call it
    8. path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);
    9. // Create a CFURL using the CFString we just defined
    10. url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);
    11. CFRelease (path);
    12. // This dictionary contains extra options mostly for 'signing' the PDF
    13. myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
    14. CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
    15. CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
    16. // Create our PDF Context with the CFURL, the CGRect we provide, and the above defined dictionary
    17. pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);
    18. // Cleanup our mess
    19. CFRelease(myDictionary);
    20. CFRelease(url);
    21. // Done creating our PDF Context, now it's time to draw to it
    22. // Starts our first page
    23. CGContextBeginPage (pdfContext, &pageRect);
    24. // Adding some text on top of the image we just added
    25. CGContextSelectFont (pdfContext, "Helvetica", 12, kCGEncodingMacRoman);
    26. CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
    27. CGContextSetRGBFillColor (pdfContext, 0, 0, 0, 1);
    28. const char *text = "text mit ü ä und so";
    29. CGContextShowTextAtPoint (pdfContext, 50, 920, text, strlen(text)); // x , y
    30. // End text
    31. // We are done drawing to this page, let's end it
    32. // We could add as many pages as we wanted using CGContextBeginPage/CGContextEndPage
    33. CGContextEndPage (pdfContext);
    34. // We are done with our context now, so we release it
    35. CGContextRelease (pdfContext);
    36. }
    Alles anzeigen
    Vielen Dank

    Gruß

    Bongartz
  • Original von gritsch
    nachher lässt du dir dann den UTF8-codierten const char * von einem NSString geben!


    Hey Danke für deine Schnell und Klasse Hilfe.

    Eine Frage habe ich aber noch. Ich steh gerade etwas auf dem Schlauch was du meinst mit dem Wiedergeben. Könntest du mir vielleicht kurz ein Code Beispiel zeigen? *schähm*
    Vielen Dank

    Gruß

    Bongartz
  • Original von gritsch
    anstelle dem Roman-encoding setzt du das utf8-encoding und statt


    Also diesen Encoder kann ich nicht finden. Soweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?
    Vielen Dank

    Gruß

    Bongartz
  • Original von Bongartz
    Original von gritsch
    anstelle dem Roman-encoding setzt du das utf8-encoding und statt


    Also diesen Encoder kann ich nicht finden. Soweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?


    CoreText gibts aufgm iPhone nicht oder?

    dann hol dir doch die glyphs und mal die mittels CGContextShowGlyphs und co ;)
  • Original von gritsch
    Original von Bongartz
    Original von gritsch
    anstelle dem Roman-encoding setzt du das utf8-encoding und statt


    Also diesen Encoder kann ich nicht finden. Soweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?


    CoreText gibts aufgm iPhone nicht oder?

    dann hol dir doch die glyphs und mal die mittels CGContextShowGlyphs und co ;)


    Öhm wie meinst du das jetzt mit dem malen?

    Ne PDF auf dem iPhon e erstellen ist echt sehr schlecht gelöst.

    Ich Frage mich gerade eh wie ich nachher meine dobule-Wert bist NSSString so umformen kann das ich diesen in der pdf ausgeben kann.
    Vielen Dank

    Gruß

    Bongartz
  • Original von Bongartz
    Original von gritsch
    Original von Bongartz
    Original von gritsch
    anstelle dem Roman-encoding setzt du das utf8-encoding und statt


    Also diesen Encoder kann ich nicht finden. Soweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?


    CoreText gibts aufgm iPhone nicht oder?

    dann hol dir doch die glyphs und mal die mittels CGContextShowGlyphs und co ;)


    Öhm wie meinst du das jetzt mit dem malen?

    Ne PDF auf dem iPhon e erstellen ist echt sehr schlecht gelöst.

    Ich Frage mich gerade eh wie ich nachher meine dobule-Wert bist NSSString so umformen kann das ich diesen in der pdf ausgeben kann.


    ja anstatt die chars anzugeben gibst du eben die glyphs an (die musst du halt zuerst rausfinden).

    das mit dem double ist kein problem!
  • Original von BongartzSoweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?

    Hast du mal in die Doku zu NSString geschaut, um nach einer geeigneten Konvertierungsmethode zu suchen? Wenn CGContextShowTextAtPoint nur mit MacRoman umgehen kann, dann musst du den NSString eben in einen C-String mit diesem Encoding umwandeln. Das geht mit getCString:maxLength:encoding:.

    Außerdem (und wahrscheinlich viel einfacher) gibt's auch -[NSString drawAtPoint:...] in diversen Varianten (findest du in der Doku, such dir die geeignete aus). Diese zeichnen in den aktuellen UIGraphicsContext, d.h. du musst deinen PDF-Context vorher mit UIGraphicsPushContext auf den Stack packen und nacher mit UIGraphicsPopContext wieder entfernen.
  • Soory, für meine dumme Frage, aber was sind glyphs. Da hab ich jetzt noch nie von gehört. Hast du vielleicht nen Link wo ich nachlesen kann was du damit meinst?

    Ja klar ein double ist kein Problem. Aber ich muss auch ein paar NSStrings angeben.
    Vielen Dank

    Gruß

    Bongartz
  • Original von elo
    Original von BongartzSoweit ich weiß kann CGContextShowTextAtPoint nur den kCGEncodingMacRoman Encoder. Jetzt frage ich mich gerade, wie denn sonst meine pdf mit Umlauten erstellen kann?

    Hast du mal in die Doku zu NSString geschaut, um nach einer geeigneten Konvertierungsmethode zu suchen? Wenn CGContextShowTextAtPoint nur mit MacRoman umgehen kann, dann musst du den NSString eben in einen C-String mit diesem Encoding umwandeln. Das geht mit getCString:maxLength:encoding:.

    Außerdem (und wahrscheinlich viel einfacher) gibt's auch -[NSString drawAtPoint:...] in diversen Varianten (findest du in der Doku, such dir die geeignete aus). Diese zeichnen in den aktuellen UIGraphicsContext, d.h. du musst deinen PDF-Context vorher mit UIGraphicsPushContext auf den Stack packen und nacher mit UIGraphicsPopContext wieder entfernen.


    Hi elo,

    langsam wird mir das gefragt wirklich peinlich.

    Ich habe in der Doku dies "- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding" zu dem getCString gefunden nur. Leider kann ih nichts mit dem (char *)buffer und dem (NSUInteger)maxBufferCount anfangen. Kannst du mir bitte sagen wie ich damit umgehen soll? Aus der apple Doku werde ich an dieser Stelle leider nicht schlau.

    Danke!!
    Vielen Dank

    Gruß

    Bongartz
  • Original von Bongartz
    Soory, für meine dumme Frage, aber was sind glyphs. Da hab ich jetzt noch nie von gehört. Hast du vielleicht nen Link wo ich nachlesen kann was du damit meinst?

    Ja klar ein double ist kein Problem. Aber ich muss auch ein paar NSStrings angeben.


    jedes zecihen in einer font ist ein sogenannter glyph und hat eine glyphID (interger). zb kann das so sein space=1, a=2, b=3 etc...

    aus NSString kannst du ja immer cStrings machen!
  • Original von gritsch
    Original von Bongartz
    Soory, für meine dumme Frage, aber was sind glyphs. Da hab ich jetzt noch nie von gehört. Hast du vielleicht nen Link wo ich nachlesen kann was du damit meinst?

    Ja klar ein double ist kein Problem. Aber ich muss auch ein paar NSStrings angeben.


    jedes zecihen in einer font ist ein sogenannter glyph und hat eine glyphID (interger). zb kann das so sein space=1, a=2, b=3 etc...

    aus NSString kannst du ja immer cStrings machen!


    mh ok ,aber das würde ja bedeuten das ich das mit reisen Zahlenketten machen müsste. Und da ich sehr viel Text in diese PDF reinbringen muss. Wäre das ja sehr krass. Oder gibt es software di einem das übersetzt?
    Vielen Dank

    Gruß

    Bongartz
  • Original von Bongartz
    Ich habe in der Doku dies "- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding" zu dem getCString gefunden nur. Leider kann ih nichts mit dem (char *)buffer und dem (NSUInteger)maxBufferCount anfangen. Kannst du mir bitte sagen wie ich damit umgehen soll?

    Nein, weil es nichts bringt, wenn ich dir die Zeile hinschreibe. Du musst die Grundlagen von C lernen, wenn du damit arbeiten willst. Kauf dir ein Buch oder lies ein C-Tutorial im Netz (insbes. zu C-Strings und Zeigern). Und wie gesagt, dein aktuelles Problem lässt sich mit den drawAtPoint...-Methoden von NSString m.E. auch ohne C-Strings lösen. Nichtsdestotrotz würdest du davon profitieren, dir die Grundlagen anzueignen.
  • Original von elo
    Original von Bongartz
    Ich habe in der Doku dies "- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding" zu dem getCString gefunden nur. Leider kann ih nichts mit dem (char *)buffer und dem (NSUInteger)maxBufferCount anfangen. Kannst du mir bitte sagen wie ich damit umgehen soll?

    Nein, weil es nichts bringt, wenn ich dir die Zeile hinschreibe. Du musst die Grundlagen von C lernen, wenn du damit arbeiten willst. Kauf dir ein Buch oder lies ein C-Tutorial im Netz (insbes. zu C-Strings und Zeigern). Und wie gesagt, dein aktuelles Problem lässt sich mit den drawAtPoint...-Methoden von NSString m.E. auch ohne C-Strings lösen. Nichtsdestotrotz würdest du davon profitieren, dir die Grundlagen anzueignen.


    Ich frage mich gerade nur wie mir ein Objetive-C Befehl in C was bringen kann. Da ich ja die PDF mit Quart 2D erstelle und soweit ich weise Quartz 2D nur C versteht. Könnte ich mit Objetive-C arbeiten hätte ich ja auch nicht das Problem mit den Umlauten.

    Ich schau mir dann noch mal die cStrings an.
    Vielen Dank

    Gruß

    Bongartz