2011-04-13 7 views
1

J'essaie d'intégrer deux services tiers différents en javascript et je reçois des chaînes dans un certain jeu de caractères, que j'ai besoin de convertir en un jeu de caractères différent en Javascript.Convertir Unicode en UTF8

Par exemple, la chaîne est tést.

On me donne une chaîne codée comme ceci: te% u0301st. L'accent est codé en% u0301. J'ai besoin de convertir en quelque sorte cette chaîne: t% C3% A9st où le é est codé en% C3% A9. Comment puis-je convertir e% u0301 en% C3% A9 en javascript?

Merci

+2

Pouvez-vous fournir plus d'informations sur le codage d'entrée? Il semble que vous essayez de produire UTF-8 codé URI (compte tenu du pourcentage de codage des octets UTF-8). Quel est le format de la chaîne d'entrée? '% u' suivi de 4 chiffres hexadécimaux, 4-6 chiffres hexadécimaux? Ou essayez-vous juste de représenter le fait que vous avez une chaîne, en Javascript, avec le code de code Unicode U + 0301? Et essayez-vous intentionnellement de normaliser la corde aussi bien que de la transcoder (en passant de la combinaison des accents aux caractères précomposés)? –

Répondre

2

Vous semblez essayer de normaliser votre entrée, probablement en Unicode normal formulaire C. Je ne sais pas d'aucune façon simple de le faire en Javascript; vous devrez peut-être implémenter le normalization algorithm ou trouver une bibliothèque qui le fera.

édité pour enlever réponse à la mauvaise question

+0

En fait, la chaîne est "tést". C'est seulement lors de l'exécution de escape() que je peux voir que l'é est codé avec le point de code% u unicode. J'ai besoin de convertir en quelque sorte l'encodage de la chaîne de manière à ce que l'exécution de escape() génère le codage% C3 à la place. Je m'excuse de ne pas connaître la terminologie correcte pour l'encodage final dont j'ai besoin. J'ai toujours besoin de la chaîne pour être "tést", mais j'ai besoin de l'encoder différemment. Cela a-t-il du sens? J'ai essayé d'exécuter votre code, mais il l'a simplement converti en un cercle vers la même chose que j'avais auparavant. – Jake

+0

@Jake Ah, d'accord. Je me suis trompé dans ce que vous essayiez de faire. Il semble que vous essayez simplement de normaliser vos chaînes dans la forme normale C, pas de les échapper ou de les faire disparaître (vous utilisiez simplement cela pour montrer quels codes sont réellement présents dans la chaîne). –

0

Si tout ce que vous avez besoin est tout codage Unicode échappé URL, cela fera l'affaire:

function convert(s) { 
    function parse(a, c) { 
    return String.fromCharCode(parseInt(c, 16)); 
    } 
    return encodeURIComponent(s.replace(/%u([0-f]{4})/gi, parse)); 
} 

convert('te%u0301st'); // => te%CC%81st 

Si vous avez besoin spécifiquement normal Formulaire C, vous devez implémenter vous-même beaucoup d'intelligence Unicode, car 'te\u0301st'.length (ou 'tést'.length) est 5 en javascript.