2012-10-31 24 views
12

Moja baza danych (MySql) zawiera zbiór utf8_general. Uzyskuję dostęp do danych z bazy danych i pokazuję stronę internetową (opracowaną w Perlu), która pokazuje szwedzkie znaki (ä, å, ö) z różnymi znakami. Sprawdziłem bazę danych Mysql, tam widzę dane z ä, å, ö znakami. Wygląda na to, że podczas uzyskiwania dostępu do danych występuje problem z kodowaniem. Podczas łączenia się z bazą danych, stosowany po kodzieutf8 w Perlu i MySql

my($dbh) = DBI->connect($config{'dbDriver'},$config{'dbUser'},$config{'dbPass'}) or die "Kunde inte ansluta till $config{'dataSource'}: " . $DBI::errstr; 
$dbh->{'mysql_enable_utf8'} = 1; 
$dbh->do('set names utf8'); 

Każda pomoc jest appreaciated!

Dzięki.

+0

"Wystąpił problem podczas uzyskiwania dostępu do tych danych" nie jest wystarczającym opisem problemu. – ikegami

+0

Mam na myśli problem z kodowaniem podczas uzyskiwania dostępu do danych. Również zaktualizowałem swoje pytanie. – dotnetrocks

+0

Jak dokładnie wyświetlają się postacie? Jakie kodowanie to twoja strona internetowa? –

Odpowiedz

6

Jeżeli każde A/A/O jest reprezentowany na wyjściu przez dwa bajty, to jest to również możliwe, że może być dwukrotnie kodowanie postaci. (Biorąc pod uwagę, że pytanie już pokazuje, że robisz $dbh->{'mysql_enable_utf8'} = 1;, podejrzewam, że jest to najbardziej prawdopodobny przypadek.) Inną możliwością, biorąc pod uwagę, że wyświetlasz to na stronie internetowej, jest to, że strona może nie określać, że zestaw znaków to UTF -8 w jego <head>, a przeglądarka mogłaby odgadnąć niepoprawnie kodowanie znaków, którego używa.

Przyjrzyj się swojej strukturze aplikacji internetowych, szablonowi itp., Aby upewnić się, że wartości są zakodowane tylko raz, gdy są pobierane z bazy danych i kiedy docierają do przeglądarki użytkownika. Wiele frameworków/silników szablonów (takich jak kombinacja Dancer i TT, które normalnie używam) będzie obsługiwać kodowanie wyjściowe automatycznie, jeśli je poprawnie skonfigurujesz, co oznacza, że ​​dane będą podwójnie zakodowane, jeśli zostaną jawnie zakodowane przed wyprowadzeniem.

+1

Kodowałem dwa razy. Usunąłem go i pracuję teraz! wielkie dzięki !! :) – dotnetrocks

0

Musisz ustawić Charset na utf8 w twoim połączeniu!

charset = utf8 
6

Musisz ustawić mysql_enable_utf8 na połączenia:

my($dbh) = DBI->connect(
    'dbi:mysql:test', 
    'user', 
    'password', 
    { 
     mysql_enable_utf8 => 1, 
    }  
); 
+0

Cześć, dzięki. Próbowałem mysql_enable_utf8 => 1, ale problem nie został rozwiązany. – dotnetrocks

+0

@dotnetrocks: rozwiązał problem podany w pytaniu. Jeśli masz problemy z kodowaniem na stronach internetowych, powinieneś zadbać o IO i odpowiednie nagłówki. –

Powiązane problemy