2008-11-04 5 views
7

J'ai un petit problème avec une application php-gtk qui continue à fonctionner dans des chaînes non-utf8, j'ai trouvé que le problème est dans la connexion à la base de données, même si la base de données est supposée être en UTF-8. J'ai essayé avec le "SET CHARACTER SET utf8" (façon MySQL) et le "SET NAMES UTF8" et rien ne se passe (il n'y a aucune information sur aucune de ces commandes dans la page "Query Language Understood by SQLite " non plus, donc Je ne suis pas surpris à ce sujet). PD: Peut-être que la connexion est déjà en UTF-8 et que les données ne le sont pas, mais s'il existe un moyen de changer le codage de la connexion, cette question serait toujours utile.Comment changer le codage de caractères d'une connexion PDO/SQLite en PHP?

Répondre

8

Autant que je peux dire, SQLite only has one setting for charset, qui est sur un niveau par base de données. Vous ne pouvez pas modifier l'encodage sur la connexion.

L'API C a two different ways pour ouvrir une connexion, soit UTF-8 ou UTF-16. Je m'attendrais à ce que le module SQLite de PHP (et donc PDO) utilise simplement la version UTF-8. Si c'est correct, je m'attendrais à ce qu'une connexion SQLite soit toujours UTF-8. Cela signifie que vous devez encoder/décoder manuellement les chaînes avec utf8_encode/utf8_decode.

Voir aussi: http://www.alberton.info/dbms_charset_settings_explained.html

+2

j'avais découvert que « SQLite est pas particulièrement sur le texte qu'il reçoit et est plus qu'heureux de traiter des chaînes de texte qui ne sont pas normalisées ou même bien formé UTF-8 programmeurs qui veulent. pour stocker IS08859 les données peuvent faire ... "Soo le texte était originairement en ISO85 (quelque chose) – levhita

+1

J'ai suivi votre conseil et ajouté quelques utf8_encodes (merci les dieux de la programmation pour OOP) donc tout est utf8 depuis le début. Ma base de données principale a été recréée en UTF8, et je viens d'ajouter ces lignes pour coupler mon système avec certaines bases de données plugin. – levhita

+2

Dans ce cas, vous devrez utiliser utf8_decode lors de la récupération des données. Tout cela n'est nécessaire que si vous utilisez le jeu de caractères par défaut de PHP (ISO-8859-1) en interne. Pensez à utiliser UTF-8 à travers votre système, auquel cas vous n'avez rien à coder (Oui, c'est déroutant). – troelskn

Questions connexes