Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności:
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Połączenie z bazą danych, brak polskich znaków  (Przeczytany 606 razy)
« : 22:38 03/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


Witam piszę program który pobiera dane z bazy danych MySQL.
W bazie polskie znaki wyświetlane są poprawnie, również tekst zapisany w kodzie jest wyświetlany z polskimi znakami. Jednak gdy chcę wyświetlić za pomocą programu dane z bazy to zamiast polskich zanków diakrytycznych pojawiają się  znaki zapytania.
Zapisane
« Odpowiedz #1 : 23:21 03/10/17 »
guest013 Offline
Advanced Python User

Zobacz profil
**

Reputacja: 13
Wiadomości: 109


Czy pierwsza linia twojego kodu to:
Kod
# -*- coding: utf-8 -*-

Ewentualnie otwierając plik należy użyć
Kod
with open(file, mode, encoding ="utf-8") as file: 
 
Zapisane

Expect nothing and you will never be dissapointed
« Odpowiedz #2 : 08:06 04/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


tak mam wpisaną tą linię, z otwarciem pliku w ten sposób sprawdzę
Zapisane
« Odpowiedz #3 : 10:36 04/10/17 »
guest013 Offline
Advanced Python User

Zobacz profil
**

Reputacja: 13
Wiadomości: 109


Jeśli nie zadziała poczytaj odpowiedź na to pytanie https://stackoverflow.com/questions/15092437/python-encoding-utf-83
Zapisane

Expect nothing and you will never be dissapointed
« Odpowiedz #4 : 16:05 04/10/17 »
Guaz Offline
Advanced Python User

Zobacz profil
**

Reputacja: 24
Płeć: Mężczyzna
Wiadomości: 168


W tym przypadku to raczej kwestia biblioteki, sprawdź czy możesz nadpisać klasie/bibliotece jakiego ma używać kodowania, lub narzucić jej w momencie wyciągania danych z bazy. (Prosty encode powinien rozwiązać problem)

Bo skoro dane wpisane do programu (jak np. print("Test znaków ąęłćżźńó") wyświetlają się poprawnie, nie stanowi problemu pierwsza linia. Zwłaszcza że w Pythonie 3 nie trzeba jej zamieszczać bo utf-8 stał się w tej wersji żelaznym standardem z tego co pamiętam.
Zapisane

Python 3.5.2 / Mint
« Odpowiedz #5 : 19:16 04/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


Niestety encode nie pomogło.
Program piszę w pythonie 2.7 gdyż ma on działać pod Win XP.
Zapisane
« Odpowiedz #6 : 21:23 04/10/17 »
guest013 Offline
Advanced Python User

Zobacz profil
**

Reputacja: 13
Wiadomości: 109


A próbowałeś unicode?
Zapisane

Expect nothing and you will never be dissapointed
« Odpowiedz #7 : 09:09 05/10/17 »
raydeal Offline
Professional Python User

Zobacz profil
***

Reputacja: 55
Wiadomości: 323


@zawio po:
1. jakie masz ustawione kodowanie znaków w tabeli bazy danych?
2. czego używasz do łączenia się do bazy i czy jest możliwość ustawienia kodowania znaków dla sesji (połączenia do bazy danych)?
3. jeśli nie da się ustawić kodowania z pkt.2 to użyj odpowiednio decode/encode przy pobraniu danych z bazy.
Zapisane
« Odpowiedz #8 : 11:04 05/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


baza danych jest kodowana w utf-8
używam MySQLdb, muszę sprawdzić czy da się ustawić kodowanie dla sesji,
aktualnie doszedłem do tego że biblioteka koduje w latin1 i z tego cały problem
Zapisane
« Odpowiedz #9 : 12:27 05/10/17 »
raydeal Offline
Professional Python User

Zobacz profil
***

Reputacja: 55
Wiadomości: 323


latin1 jest domyślnym kodowaniem tej biblioteki.
Jako parametry połączenia użyj "use_unicode" lub "charset". W przypadku "charset" MySQL wprowadził coś takiego jak ilość bajtów dla utf8 np. utf8mb4, utf8mb8 wiec sprawdz jak masz w bazie.
Przykłady:
Kod
connect(...,use_unicode=True,...)
#lub
connect(...,charset='utf8mb4',...)
Zalecam używać powyższe rozwiązanie.
Jeśli chciałbyś nie używać ustawień połączenia, a bazować na domyślnym,  to w kodzie odczytując dane trzeba by użyć decode('latin1') - (lub encode - zawsze mi się to myli Uśmiech) piszę z pamięci, dawno tak nie robiłem więc mogłem coś pomylić, ale trzeba pokombinować z encode/decode i latin1/utf8. Nie polecam tego rozwiązania.
Zapisane
« Odpowiedz #10 : 20:13 06/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


Niestety nie pomogło, ani ustawienie kodowania przy połączeniu, ani decode encode
Zapisane
« Odpowiedz #11 : 22:27 11/10/17 »
zawio Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 6


Przerzuciłem się na PostgreSQL działa bz problemów.

No przynajmniej jak na razie  Mrugnięcie
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2017 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot