Ik ben op het moment bezig met het installeren van een Trac omgeving, en probeer al een halve dag om de bugs uit ons oude systeem (Mantis) over te zetten naat Trac. Hier is een script voor beschikbaar, Mantis2trac, echter hier loop ik tegen een aantal problemen in verband met speciale tekens.
De brondatabase is een MySQL tabel waar alle encodings ingesteld staan op utf8_general_ci. Het script zelf probeert ook alle strings te vertalen naat UTF-8, door middel van value.encode('utf-8') (een Python functie).
Echter, dit geeft telkens een volgende foutmelding:
Dit komt voor op elke tekst waar een ë of á of iets dergelijks in staat.
Nu dacht ik 'De brontekst is al in UTF 8, dus ik haal gewoon de conversie weg'. Dan geeft hij echter de foutmelding:
Dit komt voor in de tekst "speciale teken φ als ? afgedrukt". Nu lijkt het mij echter dat 'ergens' de verkeerde encoding gebruikt wordt, aangezien de tekst in de tracker zelf "speciale teken í als ? afgedrukt " luidt (í ipv φ).
Nu heb ik weinig tot geen kennis van Python noch van karakter encodings. Ik heb Google afgestruind, maar er lijkt geen kant-en-klare oplossing voor mijn probleem te zijn, noch een fix voor het script. Ik heb zelf alle encodings nagekeken, en voor zover ik weet wordt er altijd met UTF-8 gewerkt. Ik kan me moeilijk voorstellen dat de MySQL connector ineens gegevens met een andere encoding zou doorgeven, ook aangezien het script al een tijdje in de running is en, volgens mij, regelmatig met succes gebruikt wordt.
Is er iemand die me hiermee verder kan helpen? Hints en/of tips waar ik nog naar kan kijken?
Het alternatief is om handmatig of met een query alle speciale tekens uit de bug tabel te halen, maar hierdoor kan informatie verloren gaan, en het is natuurlijk veel werk (ook aangezien er 3000 bugs in het systeem staan inclusief opmerkingen van de verschillende developers).
Edit: lijkt erop dat deze issue al langer speelt en dat er geen developers zijn die het opgepakt hebben: zie hier. Heb mijn eigen opmerking daar ook bijgezet.
De brondatabase is een MySQL tabel waar alle encodings ingesteld staan op utf8_general_ci. Het script zelf probeert ook alle strings te vertalen naat UTF-8, door middel van value.encode('utf-8') (een Python functie).
Echter, dit geeft telkens een volgende foutmelding:
code:
1
2
3
4
5
6
7
8
9
10
| Traceback (most recent call last): File "c:\python26\scripts\mantis2trac.py", line 946, in <module> main() File "c:\python26\scripts\mantis2trac.py", line 943, in main convert(MANTIS_DB, MANTIS_HOST, MANTIS_USER, MANTIS_PASSWORD, TRAC_ENV, TRAC_CLE File "c:\python26\scripts\mantis2trac.py", line 683, in convert trac.addTicket(**ticket) File "c:\python26\scripts\mantis2trac.py", line 387, in addTicket desc = description.encode('utf-8') UnicodeDecodeError: 'utf8' codec can't decode bytes in position 10-12: invalid data |
Dit komt voor op elke tekst waar een ë of á of iets dergelijks in staat.
Nu dacht ik 'De brontekst is al in UTF 8, dus ik haal gewoon de conversie weg'. Dan geeft hij echter de foutmelding:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| inserting ticket 91 -- "speciale teken φ als ? afgedrukt" Traceback (most recent call last): File "c:\python26\scripts\mantis2trac.py", line 946, in <module> main() File "c:\python26\scripts\mantis2trac.py", line 943, in main convert(MANTIS_DB, MANTIS_HOST, MANTIS_USER, MANTIS_PASSWORD, TRAC_ENV, TRAC_CLEAN) File "c:\python26\scripts\mantis2trac.py", line 683, in convert trac.addTicket(**ticket) File "c:\python26\scripts\mantis2trac.py", line 404, in addTicket summary, desc, keywords)) File "build\bdist.win32\egg\trac\db\util.py", line 122, in execute File "build\bdist.win32\egg\trac\db\sqlite_backend.py", line 78, in execute File "build\bdist.win32\egg\trac\db\sqlite_backend.py", line 56, in execute File "build\bdist.win32\egg\trac\db\sqlite_backend.py", line 48, in _rollback_on_error sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (l ike text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings. |
Dit komt voor in de tekst "speciale teken φ als ? afgedrukt". Nu lijkt het mij echter dat 'ergens' de verkeerde encoding gebruikt wordt, aangezien de tekst in de tracker zelf "speciale teken í als ? afgedrukt " luidt (í ipv φ).
Nu heb ik weinig tot geen kennis van Python noch van karakter encodings. Ik heb Google afgestruind, maar er lijkt geen kant-en-klare oplossing voor mijn probleem te zijn, noch een fix voor het script. Ik heb zelf alle encodings nagekeken, en voor zover ik weet wordt er altijd met UTF-8 gewerkt. Ik kan me moeilijk voorstellen dat de MySQL connector ineens gegevens met een andere encoding zou doorgeven, ook aangezien het script al een tijdje in de running is en, volgens mij, regelmatig met succes gebruikt wordt.
Is er iemand die me hiermee verder kan helpen? Hints en/of tips waar ik nog naar kan kijken?
Het alternatief is om handmatig of met een query alle speciale tekens uit de bug tabel te halen, maar hierdoor kan informatie verloren gaan, en het is natuurlijk veel werk (ook aangezien er 3000 bugs in het systeem staan inclusief opmerkingen van de verschillende developers).
Edit: lijkt erop dat deze issue al langer speelt en dat er geen developers zijn die het opgepakt hebben: zie hier. Heb mijn eigen opmerking daar ook bijgezet.