Welche Art von Zeichenketten hat CFStringCreateWithFormat erwartet als Argumente?
Frage
Das folgende Beispiel soll mit Unicode-Strings arbeiten, aber es funktioniert nicht.
CFStringRef aString = CFSTR("one"); // in real life this is an Unicode string
CFStringRef formatString = CFSTR("This is %s example"); // also tried %S but without success
CFStringRef resultString = CFStringCreateWithFormat(NULL, NULL, formatString, aString);
// Here I should have a valid sentence in resultString but the current result is like aString would contain garbage.
Lösung
Andere Tipps
Als Antwort auf den Kommentar in der anderen Antwort, würde ich das Poster zu
empfehlen- erzeugt ein UTF8-String in einem tragbaren Weg in
char*
- und, in letzter Minute ab, konvertiert sie mit
CFString
mitCFStringCreateWithCString
als CodierungkCFStringEncodingUTF8
.
Bitte benutzen Sie bitte nicht %s
in CFStringCreateWithFormat
. Bitte verlassen Sie sich nicht auf der „System-Codierung“, die MacRoman auf westeuropäische Umgebungen ist, aber nicht in anderen Sprachen. Das Konzept der System Codierung ist von Natur aus hirntot, vor allem im ostasiatischen Umgebungen (was ich herkomme), wo auch die Zeichen in ASCII-Code-Bereich (unter 127!) Geändert wird. Bricht die Hölle los, wenn Sie auf „System-Codierung“ verlassen. Zum Glück, denn 10.4 werden nun alle Methoden, die "System-Codierung" verwenden veraltet, außer %s
....
Es tut mir leid ich so viel für dieses kleine Thema schreiben, aber es war vor ein paar Jahren wirklich schade, wenn es viele nette apps waren, die wegen nicht nur auf Japanisch / Koreanisch Macs arbeiten dieses „System-Codierung. " Bitte beachten Sie dieser ausführlichen Erklärung rel="nofollow die ich vor ein paar Jahren schrieb, wenn Sie interessiert sind.