2017-06-21 3 views
2

objet Enregistrer avec chaîne donâ € ™ t faire par ServiceStack et OrmLite à MySQL.problème d'encodage quand save chaîne "donâ € ™ t faire" par ServiceStack et Ormlite à MySQL

La chaîne a changé à Donà ¢ â, ¬ â « ¢ t faire dans MySQL.

Si je lis la valeur de MySQL et enregistrer à nouveau, puis se Donà¢ à ¢ â € ¢ â € šÂ¬Ã Za ¢ t faire

Il ne se est passé sur un serveur Windows 2016 avec .net 4.62, il fonctionne correctement sur d'autres fenêtres avec .net 4.62 et OSX avec Mono.

La version des bibliothèques ServiceStack est "4.5.0"; La version de MySQL est 5.6.23; La table de base de données et le jeu de caractères de colonne sont UTF-8.

Il se peut que le mauvais codage s'échappe quelque part et le répète encore et encore. J'ai mis à jour de .net 4.5 à 4.62 récemment.

Je ne peux pas le déboguer: il fonctionne sur le développement de MAC, et tester Windows; il a seulement échoué dans l'environnement de production.

+0

Cela s'appelle "double encodage". Même "triple encodage". Vous traitez plusieurs fois les octets comme latin1, puis convertissez en utf8. –

Répondre

2

Le problème a réglé:

Il est de la chaîne de connexion MySQL. Nous avons récemment ajouté le "ConnectionReset = True;" qui a déclenché ce problème d'encodage.

Il va convertir une chaîne UTF-8 à lire en tant que codage Western 1252; donc un â € ™ sera affiché comme à ¢ â, ¬ â « ¢, et ainsi de suite

Il est capable de se reproduire sur un autre Windows Server. Après l'avoir défini sur false ou l'avoir supprimé, il doit être remplacé par

c'est corrigé.