For at præcisere et par ting, for det vil også hjælpe dig på vej i fremtiden.
txt = u'Arabic (\u0627\u0644\u0637\u064a\u0631\u0627\u0646)'
Dette er ikke en arabisk streng. Dette er et unicode objekt , med unicode-kodepunkter. Hvis du blot skulle udskrive det, og hvis din terminal understøtter arabisk, ville du få output som dette:
>>> txt = u'Arabic (\u0627\u0644\u0637\u064a\u0631\u0627\u0646)'
>>> print(txt)
Arabic (الطيران)
For nu at få det samme output som Arabic (الطيران)
i din database skal du kode strengen.
Kodning tager disse kodepunkter; og konvertere dem til bytes, så computere ved, hvad de skal gøre med dem.
Så den mest almindelige kodning er utf-8
, fordi det understøtter alle tegn på engelsk, plus en masse andre sprog (inklusive arabisk). Der er også andre, for eksempel windows-1256
understøtter også arabisk. Der er nogle, der ikke har referencer til disse numre (kaldet kodepunkter), og når du forsøger at kode, får du en fejl som denne:
>>> print(txt.encode('latin-1'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 8-14: ordinal not in range(256)
Hvad det fortæller dig er, at et eller andet nummer i unicode-objektet ikke eksisterer i tabellen latin-1
, så programmet ved ikke, hvordan det konverteres til bytes.
Computere gemmer bytes. Så når du gemmer eller overfører information, skal du altid kode/afkode den korrekt.
Dette indkodnings-/afkodningstrin kaldes nogle gange unicode-sandwich - alt udenfor er bytes, alt indeni er unicode.
Med det af vejen skal du kode dataene korrekt, før du sender dem til din database; for at gøre det, indkode det:
q = u"""
INSERT INTO
tab1(id, username, text, created_at)
VALUES (%s, %s, %s, %s)"""
conn = MySQLdb.connect(host="localhost",
user='root',
password='',
db='',
charset='utf8',
init_command='SET NAMES UTF8')
cur = conn.cursor()
cur.execute(q, (id.encode('utf-8'),
user_name.encode('utf-8'),
text.encode('utf-8'), date))
For at bekræfte, at det bliver indsat korrekt, skal du sørge for, at du bruger mysql fra en terminal eller et program, der understøtter arabisk; ellers - selvom det er indsat korrekt, når det vises af dit program - vil du se skraldtegn.