2009-12-08 3 views
1

t-il quelqu'un au courant d'aucune façon simple de angliciser une chaîne? À l'heure actuelle, dans notre système, nous faisons le remplacement sur les caractères « invalide », comme ci-dessous:Anglicisation de cordes?

 ret = ret.Replace("ä", "ae"); 
     ret = ret.Replace("Ä", "Ae"); 
     ret = ret.Replace("ß", "ss"); 
     ret = ret.Replace("ç", "c"); 
     ret = ret.Replace("Ç", "C"); 
     ret = ret.Replace("Ž", "Z"); 

La question ici est que nous allons ouvrir l'entreprise dans d'autres pays (Turquie, Russie, Hongrie ...), nous constatons qu'il y a toute une série de caractères que ce processus ne convertit pas.

qui le sait toute sorte de solution qui nous permettrait de ne pas dépendre d'une table de caractères « invalide »?

De plus, si elle aide, nous utilisons C# code. :)

Merci!


modifier:

En réponse à certains commentaires, notre système prend en charge l'ensemble des caractères unicode ... cependant, un autre système que nous intégrons à (tels que les processeurs de carte) ne le font pas. :(

+7

Il est pratiquement garanti qu'il y aura toujours un langage étrange avec des caractères étranges qui passeront à travers les mailles du filet; pourquoi ne pas changer votre application pour supporter unicode? –

+2

Une langue étrange, comme ... Toute langue dans le monde sauf l'anglais? – Amnon

+1

@Carl: Comme le système semble être en C#, on peut supposer qu'il supporte déjà Unicode. Il peut y avoir des scénarios de traitement de texte où vous ne voulez pas de caractères diacritiques (indexation, stemming, ou toute autre forme de texte "normalisation") –

Répondre

2

Découvrez this question et ses réponses et jeter un oeil à this blog entry sur la conversion des caractères diacritiques à leurs équivalents ASCII.

+0

En fait, je viens d'essayer cette méthode, et ce n'est pas semblent attraper tous les caractères. æœÄŒæßüÿt ° est converti æœAŒæßuyt ° ö, que je me attends à une anglicisation à Oe, modifications simplement o – Tyllyn

+2

@Tyllyn: En fait, la traduction peut également être fonction de la langue. En suédois "ö" est mappé sur "o", alors qu'en allemand vous le représenteriez comme "oe". –

+0

@divo: Bon seigneur, ça rend tout plus confus. : < – Tyllyn

0

Juste parce qu'une lettre semble semblable à une lettre traditionnelle anglaise ne fait pas équivalent. ce qui est le cas d'une entreprise pour non seulement soutenir Unicode et tous les personnages de votre public choisit d'utiliser

+0

Notre serveur de messagerie (que nous modifions bientôt) ne prend pas en charge les caractères en dehors de l'ensemble [a-zA-Z0-9] pour les noms d'utilisateur. Et pour les processeurs de cartes que nous utilisons ne le supporte pas à un moment donné. De notre pratique commerciale, nous ne nous sommes pas limités à ce jeu de caractères limité ... et, bien, il a causé des problèmes en allant à d'autres systèmes. :( – Tyllyn

1

en réponse au problème modifié (serveur de messagerie prend en charge des caractères alphanumériques dans les noms d'utilisateur):

Laissez les utilisateurs choisir leurs propres noms d'utilisateur, ne permettant que des caractères alphanumériques. Ils savent probablement mieux comment l'angliciser.

+0

Nous allons sur la route, pour nous assurer que les noms d'utilisateur sont bien placés dans [a-zA-Z0-9], mais, au moins avec la partie email, ne nous permet pas de gérer les noms d'utilisateur préexistants. De plus, avec l'un des processeurs de cartes, nous leur envoyons un fichier qui a besoin d'être "anglicisé" avant.Les champs qui ont besoin d'être convertis en tant que tels incluent l'adresse et le nom.Pourrait permettre à l'utilisateur d'entrer une solution correctement anglicisée ralentir la poursuite de ces activités au rythme que nous avons, ce qui affecte l'ensemble de l'entreprise Nous voulons avoir le moins d'utilisateurs possible. – Tyllyn

0

pour présenter des excuses, je éhontée prise, mais je ne pouvais pas résister. J'ai écrit un module Python qui fait exactement ce que l'auteur du poste nécessaire:

https://github.com/revl/anglicize

Parce que Python est presque aussi lisible que pseudocode et le module est seulement d'environ 125 lignes, il est relativement facile de le réécrire en C#.

Voici ce que le module produit étant donné l'entrée du poste d'origine:

$ echo 'ä Ä ß ç Ç Ž' | anglicize 
a A ss s S S 

Comme vous pouvez le voir, « ß » a été remplacé par « art » comme l'a demandé, alors que « c », « C », et "Ž" ont été remplacés par "s", "S" et "S" respectivement, probablement parce que ce sont les équivalents phonétiques en anglais.

Quant à « A » et « A », les translittération « ae » et « Ae » serait probablement mieux que « a » et « A ». Je changerai volontiers la table de translittération si les linguistes confirment que c'est la bonne chose à faire.

Le module peut translittération tout le texte d'entrée à la fois, ou il peut traiter des données d'entrée en morceaux. La documentation se trouve dans le fichier README fourni avec le module.