2013-05-02 3 views
1

J'ai une base de données PostgreSQL qui utilise le codage de caractères WIN1252.Comment définir le codage dans une connexion Npgsql

Lors de l'interrogation de la base de données, certains enregistrements génèrent une erreur lors de la tentative de lecture des données, car ils essaient de la convertir en UTF8. Cela arrive sur certains noms étrangers contenant certains caractères non latins.

L'erreur est:

ERROR: 22P05: character with byte sequence 0x81 in encoding "WIN1252" has no equivalent in encoding "UTF8" 

Il arrive quand je l'appelle Read() sur la NpgsqlDataReader.

Ma connexion est définie comme:

new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=xyz;User Id=****;Password=****;"); 

Que puis-je faire pour lire ces données en utilisant C#?

Répondre

5

J'ai réussi à résoudre le problème. Il n'existe aucun moyen de définir la propriété dans la chaîne de connexion ou l'une des propriétés du NpgsqlConnection ou NpgsqlCommand.

Cependant, j'ai été en mesure de définir la valeur de client_encoding dans une requête. Donc, directement après l'ouverture de la connexion I de la première exécution de la (non) requête:

set client_encoding = 'WIN1252' 

Après cela, toute commande ultérieure sur la même connexion utilisé le codage approprié et a donné les résultats sans se plaindre.

Questions connexes