J'ai une chaîne de caractères que je reçois d'une application tierce et je voudrais l'afficher correctement dans n'importe quelle langue en utilisant C# sur ma Surface Windows.
En raison d'un encodage incorrect, un morceau de ma chaîne ressemble à ceci en espagnol :
Acción
alors qu'il devrait ressembler à ceci :
Acción
Selon la réponse à cette question : Comment connaître l'encodage des chaînes de caractères en C# le codage que je reçois devrait déjà être en UTF-8, mais il est lu sur Encoding.Default (probablement ANSI ?).
J'essaie de transformer cette chaîne en UTF-8 réel, mais l'un des problèmes est que je ne peux voir qu'un sous-ensemble de la classe Encoding (uniquement les propriétés UTF8 et Unicode), probablement parce que je suis limité à l'API de surface de Windows.
J'ai essayé quelques extraits que j'ai trouvés sur Internet, mais aucun d'entre eux ne s'est avéré efficace jusqu'à présent pour les langues orientales (c'est-à-dire le coréen). Voici un exemple :
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
J'ai également essayé d'extraire la chaîne dans un tableau d'octets, puis d'utiliser UTF8.GetString :
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Avez-vous d'autres idées que je pourrais essayer ?
5 votes
Votre problème vient du code qui a créé la chaîne (à partir d'un flux ou d'un byte[]) en premier lieu. Veuillez montrer ce code.
1 votes
@Oded : Les chaînes de caractères .Net sont stockées en mémoire en UTF16, mais
Encoding.Default
renvoie la page de code ANSI du système.0 votes
Voici un exemple de chaîne qui ne fonctionne pas en anglais : au lieu d'afficher day's , mon application frontale affiche : day’s.