Gérer correctement les conversions de chaînes UTF-8 vers ISO-8859-1 en C#
La conversion directe des chaînes UTF-8 en ISO-8859-1 (Latin-1) entraîne souvent une perte de données et une corruption des caractères. En effet, UTF-8 utilise un codage de longueur variable, tandis que ISO-8859-1 est un codage sur un seul octet de longueur fixe. Changer simplement le codage sans conversion d'octet appropriée entraînera une sortie incorrecte.
La clé d'une conversion précise réside dans l'utilisation de la méthode Encoding.Convert
. Cette méthode mappe correctement les octets UTF-8 à leurs équivalents ISO-8859-1, en gérant toutes les transformations nécessaires. Les caractères non présents dans l'ISO-8859-1 seront remplacés par leurs meilleures approximations ou pourront être perdus.
Voici le code C# corrigé :
<code class="language-csharp">Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; string utf8String = "ÄäÖöÕõÜü"; // Example UTF-8 string byte[] utf8Bytes = utf8.GetBytes(utf8String); byte[] isoBytes = Encoding.Convert(utf8, iso, utf8Bytes); string iso88591String = iso.GetString(isoBytes);</code>
Ce code récupère d'abord les octets UTF-8 de la chaîne d'origine. Ensuite, Encoding.Convert
transforme ces octets en une représentation adaptée à l'ISO-8859-1. Enfin, le tableau d'octets résultant est décodé à l'aide du codage ISO-8859-1 pour produire la chaîne finale. N'oubliez pas que tous les caractères extérieurs au jeu de caractères ISO-8859-1 peuvent être perdus ou remplacés au cours de ce processus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!