2010-08-23 6 views
0

Dans cette fonction, j'obtiens l'émoticône sélectionnée de NSTableView du NSArrayController connectée à un IBOutlet appelé emotes. La chaîne dans le NSArray sélectionné contient des caractères UTF8 qui sont envoyés au Presse-papiers.Conversion Hex NSString et UTF8

// Get Selected Emoticon 
NSArray * selectedemote = [emotes selectedObjects]; 
NSLog(@"%@",[selectedemote valueForKey:@"emote"]); 
// Send to Clipboard 
[self copyToClipboard:[NSString stringWithFormat:@"%@",[selectedemote valueForKey:@"emote"]]]; 

Le problème provient du NSArray lui-même. Il semble sortir la chaîne UTF8 en hexadécimal. Voici ce que la chaîne ressemble à de la fonction NSLog:

2010-08-23 11:23:56.411 Emoticon[7919:a0f] (
    "\\(\U2579\U30ee\U2579)/" 
) 

est-il un moyen possible de convertir l'hexagone UTF-8 à un caractères UTF-8? Merci.

+1

Une chaîne ne contient rien UTF-8. UTF-8 est un codage; vous utilisez un encodage pour produire des données à partir d'une chaîne (ou pour décoder une chaîne à partir de données). Ainsi, vous pourriez avoir des données UTF-8 ou des données UTF-16 encodant les caractères de la chaîne, mais la chaîne contient simplement des caractères. –

Répondre

1

J'ai résolu le problème. La solution est d'utiliser la description NSEntityDescription et de l'init avec objectAtIndex: 0 dans le NSArray avec la cellule sélectionnée. En utilisant NSEntityDescription, j'ai la valeur pour Emote.

-(IBAction)sendtoclipboard:(id)sender 
{ 
    // Get Selected Emoticon 
    NSArray * selectedemote = [emotes selectedObjects]; 
    NSEntityDescription *entity = [selectedemote objectAtIndex:0]; 
    NSString * tmpemote = [NSString stringWithFormat:@"%@",[entity valueForKey:@"emote"]]; 
    NSLog(@"%@", [entity valueForKey:@"emote"]); 
    //Send to Clipboard 
    [self copyToClipboard:tmpemote]; 
} 

Le résultat:

2010-09-07 20:03:26.488 Emoticon[45764:a0f] \(╹ヮ╹)/ 
0

Le problème est lié à NSArray lui-même. Il semble sortir la chaîne UTF8 en hexadécimal.

Comme je l'ai noté dans mon commentaire, la chaîne n'est pas UTF-8. Les chaînes n'ont rien à voir avec les encodages, sauf lorsque vous les créez à partir de données ou que vous en créez des données.

Voici ce que la chaîne ressemble à de la fonction NSLog:

se
2010-08-23 11:23:56.411 Emoticon[7919:a0f] (
    "\\(\U2579\U30ee\U2579)/" 
) 

NSArray décrit en retournant une chaîne de style ancien format liste des propriétés. Ce format doit être ASCII, de sorte que le tableau échappe les caractères non-ASCII de la chaîne avec ces séquences \U. Cela fonctionne comme il est censé, et il est spécifique à la description du tableau. La chaîne reste inchangée, comme vous le verrez si vous vous connectez directement à la chaîne.

Si vous souhaitez placer le tableau dans le presse-papier, faites-le. Vous devez créer un identificateur de type uniforme (yourdomain.yourappname.typename) et indiquer au tableau pour définir le tableau en tant que valeur de liste de propriétés pour ce type. Vous pouvez également demander au tableau de joindre les chaînes à l'aide d'un séparateur (par exemple, @"\n") et de placer cette chaîne sur le tableau sous le type de chaîne, pour faciliter le collage dans les éditeurs de texte et les champs de texte.

+0

Cela explique le problème, mais toujours pas une solution pour résoudre le problème. Je vais essayer de comprendre moi-même. – chikorita157

+0

chikorita157: Non, cela explique qu'il n'y a pas de problème. La chaîne n'est pas échappée comme le tableau le montre; le tableau ne fait échapper que dans sa description de lui-même. Comme je l'ai dit, au lieu de consigner le tableau, connectez-vous directement à la chaîne. Ensuite, vous verrez le vrai contenu de la chaîne. –