J'ai une chaîne que je reçois d'une application tierce et je souhaite 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 que cela devrait ressembler à ceci:
Acción
Selon la réponse à cette question: Comment connaître l'encodage de chaîne en C # , l'encodage que je reçois devrait déjà arriver sur UTF-8, mais il est lu sur Encoding.Default (probablement ANSI?).
J'essaie de transformer cette chaîne en véritable UTF-8, mais l'un des problèmes est que je ne peux voir qu'un sous-ensemble de la classe Encoding (propriétés UTF8 et Unicode uniquement), probablement parce que je suis limité à l'API de surface Windows.
J'ai essayé quelques extraits que j'ai trouvés sur Internet, mais aucun d'entre eux n'a réussi jusqu'à présent pour les langues orientales (c'est-à-dire le coréen). Un exemple est le suivant:
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?
Encoding.Default
retourne la page de codes ANSI du système.Réponses:
Comme vous le savez, la chaîne arrive,
Encoding.Default
vous pouvez simplement utiliser:Une autre chose dont vous devrez peut-être vous souvenir: si vous utilisez Console.WriteLine pour générer des chaînes, vous devez également écrire
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Ou toutes les chaînes utf8 seront affichées en tant que gbk ...la source
Encoding.GetEncoding(...)
; vous devrez trouver le nom du codage réel qui a été incorrectement utilisé à l'autre extrémité.myString
c'est mojibake. Le code annule d'abord le mauvais décodage puis effectue le bon décodage. Cela fonctionne tant que le mauvais décodage n'a pas perdu de données. Mais comme @SLaks l'a souligné, il serait préférable d'utiliser l'encodage exact qui était erroné. (De meilleurs noms et commentaires dans le code aideraient à comprendre à quel point un code très faux est en fait une tentative de bien faire.)La sortie doit ressembler à
appelez DecodeFromUtf8 ();
la source
Votre code lit une séquence d'octets encodés en UTF8 et les décode à l'aide d'un encodage 8 bits.
Vous devez corriger ce code pour décoder les octets en UTF8.
Sinon ( pas idéal ), vous pouvez reconvertir la chaîne incorrecte dans le tableau d'octets d'origine - en l'encodant à l'aide d'un encodage incorrect - puis décoder à nouveau les octets en UTF8.
la source
la source
Si vous souhaitez enregistrer une chaîne dans la base de données mysql, procédez comme suit: ->
La structure des champs de votre base de données i phpmyadmin [ou tout autre panneau de configuration] doit être définie sur utf8-gerneral-ci
2) vous devez changer votre chaîne [Ex. textbox1.text] en octet, par conséquent
2-1) définir l'octet [] st2;
2-2) Convertissez votre chaîne [textbox1.text] en unicode [mmultibyte string] en:
3) exécutez cette commande sql avant toute requête:
3-2) maintenant, vous devez insérer cette valeur dans le champ de nom par exemple en:
4) le travail principal que beaucoup de solutions n'ont pas pris en compte est la ligne ci-dessous: vous devez utiliser addwithvalue au lieu d'ajouter un paramètre de commande comme ci-dessous:
+++++++++++++++++++++++++++++++++ Profitez de données réelles dans votre serveur de base de données au lieu de ????
la source
Utilisez l'extrait de code ci-dessous pour obtenir des octets à partir du fichier csv
Appelez ci-dessous et enregistrez-le en tant que pièce jointe
la source