انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: در حسرت داشتن سایت در 13 آبان 1388، 09:25 قظ
-
این کد را در ویندوز اجرا می کنم
#-*-coding:utf8-*-
import MySQLdb
conn = MySQLdb.connect (host = 'localhost',
user = 'tony',
passwd = 'ppp',
db = 'store')
conn.set_character_set('utf8')
sb = unicode('پايتون','utf8')
cursor = conn.cursor ()
cursor.execute ('''
INSERT INTO form30 (namet)
VALUES("%s")'''%(sb))
cursor.execute ("SELECT namet FROM form30")
این ارور را میده
Traceback (most recent call last):
File "C:\Documents and Settings\appie\Desktop\uni.py", line 7, in ?
conn.set_character_set('utf8')
AttributeError: 'Connection' object has no attribute 'set_character_set'
در حالی که وقتی در ویندوز اجرا میشه در mysql درج میشه ولی علامت ??? درج میشه
کلا الگو واحدی هست تا در لینوکس و ویندوز اطلاعات را فارسی در mysql درج کنم و از اون لیستگیری کنم ?
-
یه کم نزدیک شدم
چکار کنم تا رشته ""سلام"" به فارسی تبدیل به کد '\xd3\xe1\xc7\xe3' بشه در شل این کارو میکنم
>>> u'سلام'
u'\xd3\xe1\xc7\xe3'
ولی وقتی در فایل می خوام این کارو بکنم گیج شدم دیگه
چطوری با پایتون این کارو بکنم و اسم این کار چیه ؟
-
با تابع repr
تابع eval هم برعکس این کار رو انجام میده.
-
لطفا ملاحظه کنید
# -*- coding: utf8 -*-
import MySQLdb
r=1
conn = MySQLdb.connect(host='localhost', user='tony', passwd='ppp',db='store')
curs = conn.cursor( )
##conn.set_character_set('utf8')
curs.execute('select * from form30')
ted='پايتون'
ted=repr(ted)
curs.execute ("""
INSERT INTO form30 (namet)
VALUES("%s")"""%(ted))
curs.execute('select * from form30')
p=curs.fetchall()
for i in p :
print i
print ted
خروجی:
("'xd9xbexd8xa7xd9x8axd8xaaxd9x88xd9x86'",)
'\xd9\xbe\xd8\xa7\xd9\x8a\xd8\xaa\xd9\x88\xd9\x86'
در حالی که من به این الگو نیاز دارم
>>> u='پايتون'
>>> u
'\x81\xc7\xed\xca\xe6\xe4'
یعنی دقیقا به این کد
'\x81\xc7\xed\xca\xe6\xe4'
برای اینکه لیست گیری کنم
-
بخاطر اینکه شما دارید از ویندوز استفاده میکنید و انکودینگش windows-1256 هست نه utf8
خروجی این دو دستور(با تعیین صریح Encoding) توی ویندوز و گنو/لینوکس یکی هست:
>>> repr(u'پايتون'.encode('windows-1256'))
"'\\x81\\xc7\\xed\\xca\\xe6\\xe4'"
>>> repr(u'پايتون'.encode('utf8'))
"'\\xd9\\xbe\\xd8\\xa7\\xd9\\x8a\\xd8\\xaa\\xd9\\x88\\xd9\\x86'"
خروجی بدون تعیین Encoding توی گنو/لینوکس:
>>> repr('پايتون')
"'\\xd9\\xbe\\xd8\\xa7\\xd9\\x8a\\xd8\\xaa\\xd9\\x88\\xd9\\x86'"
خروجی بدون تعیین Encoding توی ویندوز:
>>> repr('پايتون')
"'\\x81\\xc7\\xed\\xca\\xe6\\xe4'"