Quel genre de cordes ne CFStringCreateWithFormat attend comme arguments?
Question
L'exemple ci-dessous doit travailler avec des chaînes Unicode, mais il ne fonctionne pas.
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.
La solution
Autres conseils
En réponse au commentaire dans l'autre réponse, je recommanderais l'affiche à
- générer une chaîne UTF8 de manière portable en
char*
- et, à la dernière minute, le convertir en utilisant
CFString
CFStringCreateWithCString
aveckCFStringEncodingUTF8
comme l'encodage.
S'il vous plaît, s'il vous plaît ne pas utiliser %s
dans CFStringCreateWithFormat
. S'il vous plaît ne comptez pas sur le « système de codage », qui est MacRoman sur les environnements d'Europe occidentale, mais pas dans d'autres langues. Le concept du codage du système est intrinsèquement mort cérébrale, en particulier dans l'est des environnements asiatiques (que je viens) où même les caractères dans la plage de codes ASCII (ci-dessous 127!) Est modifié. L'enfer se déchaîne si vous comptez sur « l'encodage du système ». Heureusement, depuis 10.4, toutes les méthodes qui utilisent « système de codage » sont maintenant dépréciées sauf %s
....
Je suis désolé d'écrire autant pour ce petit sujet, mais il était vraiment dommage il y a quelques années quand il y avait de nombreuses applications agréables qui ne fonctionnent pas sur les Macs japonais / coréens en raison de tout ce « encodage du système. " S'il vous plaît se référer à cette explication détaillée que j'ai écrit il y a quelques années, si vous êtes intéressé.