Au secours, avis aux spécialistes

Nune

Membre confirmé
19 Juillet 2003
68
1
Toulouse
Bonjour,

Je récupère une CString de la manière suivante:

Bloc de code:
IBOutlet NSTextView 	*fTextView;
theViewText = [fTextView string];
...
NSString * 	theViewText;
char * theText = (char *)[theViewText lossyCString];
if (theText) 
{
    OSErr  theErr = ConvertText(id, theText, strlen(theText));
...
}

En fait ma fonction ConvertText récupère le buffer theText et doit le convertir suivant la langue en entrée (Arabe, Russe, Polonais ... ) en un buffer contenant du codepage Windows Arabic, Windows Cyrillic, ISO-8859-2 ...

J'ai essayé les TECConvertText() comme suit:

Bloc de code:
inputEncoding = CreateTextEncoding(kTextEncodingMacArabic, kTextEncodingDefaultVariant, kTextEncodingDefaultFormat);
outputEncoding = CreateTextEncoding(kTextEncodingWindowsArabic, kTextEncodingDefaultVariant, kTextEncodingDefaultFormat);
TECCreateConverter(&newEncodingConverter, inputEncoding, outputEncoding);
TECConvertText(newEncodingConverter, textBuf, byteLen, &actualInputLength, outText, outputBufferLength, &actualOutputLength);

mais ça ne marche pas mon buffer ne contient que des ??? ???? ??

Lorsqu'il s'agit de langue non exotiques comme le français ou l'anglais ..., je convertis de kTextEncodingMacRoman à kTextEncodingWindowsLatin1 et ça marche bien, le signe euro par exemple et bien retranscrit.
Je ne suis pas sûre que le texte en entrée sous en kTextEncodingMacArabic dans le cas de l'arabe par exemple, je ne sais pas comment faire. il me semble l'avoir tourné dans tous les sens sans résultat.

Please Help me
 
Je pense qu'il serait bien de mettre tout ça groupé avec ton autre question. Au passage tu as bien compris la subtilité de lossyCString ? fais attention aussi, apparemment toutes les méthodes CString dont appelées à disparaître dans l'avenir. Apple recommange la méthode UTF8String pour récuperer un char*.
 
La conversion entre encodages est directement implémentées dans Cocoa.
par exemple: [[theViewText dataUsingEncoding:...] bytes] te fait la même chose... ;)