Personnage avec l'encodage UTF8 a pas d'équivalent dans WIN1252
Je suis l'exception suivante:
Caused by: org.postgresql.util.PSQLException: ERROR: character 0xefbfbd of encoding "UTF8" has no equivalent in "WIN1252"
Est-il un moyen pour éradiquer ces personnages, que ce soit par le biais de SQL ou par programmation?
(SQL solution doit être de préférence).
Je pensais de la connexion à la DB à l'aide de WIN1252, mais il vous donnera le même problème.
- merci de me dire la solution de cette question que j'ai eu un problème similaire.
- J'ai eu une erreur similaire sur ma configuration, après la migration d'une base de données de LATIN1 en UTF8. Le problème a été ANSI pilote ODBC, lorsque l'UNICODE a été prévu.
Vous devez vous connecter pour publier un commentaire.
Que faites-vous quand vous obtenez ce message? Ne vous importez un fichier de Postgres? Comme devstuff dit que c'est un MOB de caractère. C'est un personnage de Windows écrit en premier pour un fichier texte, lorsqu'il est enregistré dans le codage UTF8 - il est invisible, 0-largeur de caractère, de sorte que vous n'aurez pas le voir lorsque l'ouvrir dans un éditeur de texte.
Essayez d'ouvrir ce fichier, par exemple, dans le bloc-notes, enregistrer sous dans le codage ANSI et ajouter (ou remplacer similaire)
set client_encoding to 'WIN1252'
ligne dans votre fichier.J'ai eu un problème similaire, et j'ai résolu en définissant l'encodage en UTF8 avec
\encoding UTF8
dans le client avant de procéder à uneINSERT INTO foo (SELECT * from bar WHERE x=y);
. Mon client est à l'aide de WIN1252 encodage mais la base de données en UTF8, d'où l'erreur.Plus d'infos sont disponibles sur le PostgreSQL wiki sous Jeu De Caractères De Soutien (devel docs).
Ne pas eridicate les personnages, ils sont réels et utilisé pour de bonnes raisons. Au lieu de cela, eridicate Win1252.
J'ai eu un problème similaire. J'ai eu un serveur lié dans SQL Server à une base de données PostgreSQL. Certaines données que j'avais dans le tableau I, a choisi d'utiliser une instruction openquery a certains personnages qui n'ont pas d'équivalent dans Win1252. Le problème est que le Système DSN entrée (dans la Source de Données ODBC Administrator), j'avais utilisé pour la connexion a été configuré pour utiliser PostgreSQL ANSI(x64) plutôt que de PostgreSQL Unicode(x64). La création d'une nouvelle source de données avec le support de l'Unicode et la création d'un nouveau modifié serveur lié et refernecing le nouveau serveur lié dans votre openquery résolu le problème pour moi. Les jours heureux.
Qui ressemble à la séquence d'octets 0xBD, 0xBF, 0xEF comme little-endian entier. C'est de l'UTF8-forme codée de l'ordre des octets Unicode-marque (BOM) caractère 0xFEFF.
Je ne suis pas sûr de ce que Postgre est un comportement normal, mais la NOMENCLATURE est normalement utilisés uniquement pour le codage de détection au début d'un flux d'entrée, et n'est généralement pas retourné dans le cadre de la suite.
Dans tous les cas, l'exception est due à ce point de code n'ayant pas de cartographie dans le Win1252 page de code. Ce sera le cas avec la plupart des autres caractères non latins, tels que ceux utilisés dans les pays d'Asie de scripts.
Pouvez-vous modifier la base de données de codage pour être UTF8 au lieu de 1252? Cela permettra à votre colonnes pour contenir presque n'importe quel caractère.
J'ai été en mesure de se déplacer par l'utilisation de la Postgres' fonction de sous-chaîne et de la sélectionner à la place:
Le commentaire que le caractère spécial commencé chaque champ a été d'une grande aide dans enfin de le résoudre.
Ce problème est apparu pour nous autour de 19/11/2016 avec nos vieux Access 97 application de l'accès à un postgresql 9.1 DB.
Cela a été résolu en changeant le pilote UNICODE au lieu de la norme ANSI (voir plang commentaire).
Voici ce qui a fonctionné pour moi :
1 activer les requêtes ad-hoc dans la procédure stockée sp_configure.
2 ajouter DSN ODBC pour votre lié au serveur PostgreSQL.
3 assurez-vous que vous avez les deux ANSI et Unicode (x64) conducteurs (essayer avec les deux).
4 exécuter la requête comme ceci ci-dessous - changer l'UID, l'ip du serveur db nom et le mot de passe.
5 il suffit de garder la requête de la dernière ligne dans postgreSQL format.