Pergunta

O exemplo abaixo deve trabalhar com cadeias de caracteres Unicode, mas isso não acontece.


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.
Foi útil?

Solução

Use %@ se você quiser incluir um CFStringRef via CFStringCreateWithFormat.

Veja seção o formato especificadores de Cordas Guia de Programação para o Núcleo Fundação .

  • %@ é para objectos c objectiva, ou objectos CFTypeRef (CFStringRef é compatível com CFTypeRef)
  • %s é para uma matriz de terminada com nulo de caracteres sem sinal de 8 bits (isto é, cordas normais C).
  • %S é para uma matriz de terminada com nulo de caracteres Unicode de 16 bits.

Um CFStringRef objecto não é o mesmo que “uma matriz terminada com nulo de caracteres Unicode 16 bits”.

Outras dicas

Como uma resposta ao comentário na outra resposta, eu recomendaria o cartaz para

  • gerar uma string UTF8 de uma forma portátil em char*
  • e, no último minuto, convertê-lo para CFString usando CFStringCreateWithCString com kCFStringEncodingUTF8 como a codificação.

Por favor, por favor, não use %s em CFStringCreateWithFormat. Por favor, não contam com o "sistema de codificação", que é MacRoman em ambientes da Europa Ocidental, mas não em outros idiomas. O conceito de sistema de codificação é inerentemente com morte cerebral, especialmente em ambientes Asiático (que eu vim), onde até mesmo os personagens dentro de intervalo de código ASCII (abaixo 127!) É modificado. o inferno quebra frouxamente se você confiar em "sistema de codificação". Felizmente, uma vez que 10,4, todos os métodos que usam "encoding sistema" estão agora obsoleta, , exceto %s ....

Me desculpe, eu escrevo isto muito por este pequeno tema, mas foi uma pena de alguns anos atrás, quando havia muitos aplicativos agradáveis ??que não funcionou no japonesas / Macs coreano por causa de apenas isso "encoding sistema. " Por favor, consulte este explicação detalhada que escrevi há alguns anos, Se você estiver interessado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top