2009-08-11 6 views
7

J'accepte l'entrée de l'utilisateur via un formulaire Web (comme UTF-8), l'enregistre dans une base de données MySQL (en utilisant le jeu de caractères UTF-8) et génère un fichier texte plus tard (encodé en UTF-8). Je me demande s'il y a une chance de corruption de texte en utilisant UTF-8 au lieu de quelque chose comme UCS-2? L'UTF-8 est-il assez bon dans cette situation?Est-ce que l'UTF-8 est acceptable pour lire/écrire des langues asiatiques?

Répondre

14

Plus que cela, c'est peut-être le seul encodage que vous devriez utiliser.

Une bonne lecture sur le sujet:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky

+0

Merci pour le lien - j'ai lu ça il y a un moment. Je suis familier avec les différents encodages (caractères de longueur fixe vs caractères de longueur variable) mais pour une raison quelconque, j'avais l'impression que l'UCS-2 pouvait représenter plus de caractères. Je suppose que j'avais tort. :) –

+1

UCS-2 et UTF-16 sont souvent confondus - pour certains codes, ils sont équivalents, mais pour d'autres, UTF-16 introduit des codes de substitution pour tenir compte du fait que tous les caractères Unicode ne correspondent pas à 16 bits. Windows et Java utilisent d'ailleurs UTF-16, _not_ UCS-2. – bdonlan

+0

Notez que UCS-2 a des caractères de longueur fixe, tandis que UTF-16 a des caractères de longueur variable. Les deux fonctionnent en morceaux de 16 bits. (Notez également que UCS-2 est obsolète.) –

2

UTF-8 peut représenter tout caractère unicode. En tant que tel, vous ne devriez pas avoir de problème avec UTF-8. En fait, UTF-8 peut même représenter certains caractères que l'UCS-2 ne peut pas représenter (UCS-2 ne peut représenter que U + 0000 à U + FFFF; UTF-8, UTF-16 et UCS-4 gèrent tous les Unicode). (codepoints)

1

Autant que je sache, UTF-8 est conçu pour englober toutes ces variations Unicode antérieures, donc oui, il devrait être bien de l'utiliser sur UCS-2. Voir http://www.unicode.org/versions/Unicode5.1.0/ et regardez dans la barre latérale pour les chapitres de livre 5.0; les pièces 9-12 devraient être ce que vous recherchez.

10

Si vous travaillez avec beaucoup de texte asiatique (plus que du texte latin), vous pouvez envisager UTF-16. UTF-8 peut représenter avec précision toute la gamme de caractères Unicode, mais il est optimisé pour le texte qui est principalement ASCII. UTF-16 est peu encombrant sur l'ensemble du Basic Multilingual Plane. Mais UTF-8 est très certainement "assez bon" - il n'y aura pas de corruption surgissant simplement parce que vous utilisez UTF-8 sur, disons, UTF-16.

0

Il fonctionne à merveille avec Devanagari.

Questions connexes