9
votes

Comment convertir de Unicode en ASCII

Y a-t-il un moyen de convertir des valeurs Unicode en ASCII?


0 commentaires

6 Réponses :


2
votes

Eh bien, voyant comment il y a quelque 100 000 caractères unicode et seulement 128 caractères ASCII, une cartographie 1-1 est évidemment impossible.

Vous pouvez utiliser l'objet encoding.ascii pour obtenir les valeurs d'octet ASCII à partir d'une chaîne UNICODE, cependant.


0 commentaires

3
votes

Techniquement, oui, vous pouvez utiliser encoding.ascii code>.

Exemple (de l'octet [] à ASCII): P>

// Convert Unicode to Bytes

byte[] uni = Encoding.Unicode.GetBytes("Whatever unicode string you have");

// Convert to ASCII

string Ascii = Encoding.ASCII.GetString(uni);


3 commentaires

Cela ne va pas fonctionner. Ceci code la chaîne comme UTF-16 octets, alors mal interpréte ces octets comme s'ils étaient ASCII (qui ne sont bien sûr pas). Aucune conversion n'est effectuée entre les valeurs de caractère par ces méthodes. Résultat: "w␀h␀a␀t␀e␀v␀e␀r␀ ␀u␀n␀i␀c␀o␀d␀e␀␀ ␀y␀o␀u␀ ␀h␀a␀v␀e␀ " (en utilisant le Image de contrôle pour le ASCII NUL ).


@Kyle_rozendo Oui, j'ai fait. Vous ne pouvez toujours pas simplement prendre les octets d'un codage et les lire comme un autre codage! C'est ce qui fait "W" → "W␀". Si cela ne fonctionne pas pour un W, ce n'est pas un problème de support de caractère (ASCII a un W). Essayez cette approche l'autre direction (ASCII → UTF-16) et vous verrez ce que je veux dire.


Je dirais que vous pouvez convertir de Unicode en ASCII. Que cela ne fait pas qu'une sortie très lisible est un artefact d'ASCII fondamentalement ne pouvant pas représenter Unicode à un niveau de caractère à caractère. Cette réponse fait cependant convertit unicode en ASCII, d'une manière ou d'une autre, ce que l'OP a demandé. (11 ans plus tard, je sais)



4
votes

Vous ne pouvez pas convertir de Unicode en ASCII. Presque tous les personnages de Unicode ne peuvent pas être exprimés en ASCII, et ceux qui peuvent être exprimés sont exprimés exactement les mêmes codes de code d'ASCII que dans UTF-8, ce que vous avez probablement ce que vous avez. Presque la seule chose que vous puissiez faire, c'est même près de la bonne chose, c'est de supprimer tous les personnages au-dessus de CodePoint 128, et même cela est très probablement presque à proximité de vos besoins. (L'autre possibilité est de simplifier les lettres accentuées ou omlautes pour faire plus de 128 caractères d'expressité, mais cela ne commence même pas à couvrir réellement unicode.)


0 commentaires

19
votes

Pour dépasser simplement les accents des caractères Unicode, vous pouvez utiliser quelque chose comme: xxx


1 commentaires

C'est exactement ce dont j'avais besoin. Pas une conversion mais une normalisation des personnages!



3
votes

Cette solution de contournement pourrait mieux répondre à vos besoins. Il lâche les caractères unicode à partir d'une chaîne et conserve uniquement les caractères ASCII.

byte[] bytes = Encoding.ASCII.GetBytes("eéêëèiïaâäàåcç  test");
char[] chars = Encoding.ASCII.GetChars(bytes);
string line = new String(chars);
line = line.Replace("?", "");
//Results in "eiac test"


0 commentaires

0
votes

Si vos champs de métadonnées n'acceptent que l'entrée ASCII. Les caractères Unicode peuvent être convertis à leur équivalent TeX via Mathjax. Qu'est-ce que MATHJAX? MATHJAX est un moteur d'affichage JavaScript pour rendu des mathématiques codées par TeX ou MathML dans les navigateurs sans nécessiter d'installation de la police ou des plug-ins de navigateur. Tout navigateur moderne avec JavaScript activé sera prêt MathJAX. Pour des informations générales sur Mathjax, visitez MathJAX.org.


0 commentaires