2009-09-03 8 views
4

Mon application affiche des caractères anglais, japonais et chinois sur un TextBox et un LinkLabel. Actuellement, je vérifie s'il y a des caractères Unicode et change la police en MS Mincho ou sinon la laisse en Tahoma. Maintenant, MS Mincho affiche japonais correctement, mais pour le chinois, je dois utiliser Sim Sun. Comment puis-je distinguer les deux?Affichage d'un texte Unicode en C#

Comment puis-je m'assurer que le texte Unicode est affiché correctement quelle que soit la police/langue?

+0

réponse Just utilisé @ shahkalpesh pour mon projet BingDownloader ... http://bing.codeplex.com/ – Mugunth

Répondre

4

Si vous avez des caractères Unicode pour chaque texte, l'utilisation d'une police qui prend en charge Unicode doit vous le couvrir correctement (par exemple, Arial Unicode MS).

+1

C'est parfait. Je bidouillais comme ce que disait @dtb. Mais cette police ArialUnicode est non seulement belle, mais sert bien le but ...: D – Mugunth

+1

Il convient de noter que Arial Unicode MS doit avoir une licence avant de pouvoir le redistribuer. – epotter

+0

@epotter: Arial Unicode MS n'est-il pas disponible par défaut avec .NET/Win7/WinXP pour les utilisateurs? –

2

Vous ne pouvez pas vous assurer que le texte Unicode est affiché correctement, quelle que soit la police et la langue, car il n'existe pas de police unique pouvant rendre tous les caractères Unicode possibles . Vous devez sélectionner une police pouvant afficher les caractères Unicode à afficher.

+2

@MusiGenesis: Je pense que la question est: Comment détectez-vous la langue afin que vous puissiez choisir la bonne police, étant donné qu'une chaîne ne contient que des caractères d'une langue? – dtb

2

Toutes les chaînes en C# sont Unicode. Les points de code anglais (latin), japonais et chinois sont simplement situés dans différentes plages de points de code.

Je pense que vous avez deux options:

  • trouver une police Unicode qui contient des caractères pour tous les points de code dans les trois langues. Essayez de deviner la langue et choisissez une police qui contient les caractères pour les points de code dans cette langue.

Pour l'option 2, vous pouvez consulter le Unicode charts pour savoir où les différents points de code sont et élargir votre algorithme de deviner la langue.

Exemple Hiragana:

bool IsHiragana(char ch) 
{ 
    return (ch >= '\u3040') && (ch <= '\u309f'); 
} 

bool IsHiragana(string s) 
{ 
    return s.Count(IsHiragana) > 0; 
} 
+0

@dtb: Je ne pense pas que OP veut faire la distinction entre japonais et chinois, etc. (au moins, ce n'est pas ce qui est dit). OP dit "Comment puis-je m'assurer que le texte Unicode est affiché correctement quelle que soit la police/langue?" – shahkalpesh

+0

@shahkalpesh: Oui, mais il n'y a pas de réponse parfaite à ça. Toutes les polices ne contiennent pas de caractères pour tous les points de code Unicode. Il n'est donc pas possible d'afficher des chaînes Unicode arbitraires, quelle que soit la police. – dtb

+0

@dtb: Vous avez raison aussi.Si j'ai raison, Arial Unicode MS a la couverture pour les scripts que veut OP. – shahkalpesh

Questions connexes