خوش آمدید، مهمان - لطفا برای ثبت نام اینجا و یا برای ورود اینجا را کلیک کنید.
+  زبان برنامه نویسی پایتون
|-+  مباحث پایه» انجمن رفع اشکال موارد برنامه نویسی» unicode اشکال
نام کاربري:
رمز عبور:
 
صفحه: [1]
  چاپ صفحه  
نويسنده موضوع: unicode اشکال  (دفعات بازدید: 345 بار)
0 کاربران و 1 مهمان درحال دیدن موضوع.
fatan
کاربر جدید
*

امتیاز: 0
آفلاین آفلاین

تعداد ارسال: 34


ديدن مشخصات آدرس ايميل
« : نوامبر 09, 2009, 14:34:54 pm »

در کد پایین 3 تا پارامتر یه دیتا باس فرستاده می شه
1-text2 که بیرون از کلاس فرام هست
2-self.text1 که داخل کلاس هست
ودر نهایت فیلدی از textctr
کد:
#-*-coding:utf8-*-
import wx
import MySQLdb
conn = MySQLdb.connect (host = "localhost",
                           user = "tony",
                           passwd = "ppp",
                           db = "store")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
text2='پايتون'
def create(parent):
    return Frame3(parent)

[wxID_FRAME3, wxID_FRAME3BUTTON1, wxID_FRAME3PANEL1, wxID_FRAME3TEXTCTRL1,
] = [wx.NewId() for _init_ctrls in range(4)]

class Frame3(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME3, name='', parent=prnt,
              pos=wx.Point(71, 279), size=wx.Size(400, 132),
              style=wx.DEFAULT_FRAME_STYLE, title='Frame3')
        self.SetClientSize(wx.Size(392, 98))

        self.panel1 = wx.Panel(id=wxID_FRAME3PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(392, 98),
              style=wx.TAB_TRAVERSAL)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME3TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(16, 16), size=wx.Size(100, 21),
              style=0, value='textCtrl1')
        self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME3TEXTCTRL1, name='textCtrl2',
        parent=self.panel1, pos=wx.Point(140, 16), size=wx.Size(100, 21),
        style=0, value='textCtrl2')
        self.textCtrl3 = wx.TextCtrl(id=wxID_FRAME3TEXTCTRL1, name='textCtrl3',
        parent=self.panel1, pos=wx.Point(260, 16), size=wx.Size(100, 21),
        style=0, value='textCtrl3')

        self.button1 = wx.Button(id=wxID_FRAME3BUTTON1, label='button1',
              name='button1', parent=self.panel1, pos=wx.Point(16, 48),
              size=wx.Size(75, 23), style=0)
        self.Bind(wx.EVT_BUTTON,self.onCloseMe,self.button1)
    def __init__(self, parent):
        self._init_ctrls(parent)
    def onCloseMe(self,event):
        self.text1=self.textCtrl1.GetValue()
        self.text2=self.textCtrl2.GetValue()
        self.text3=self.textCtrl3.GetValue()     
        self.text1='پايتون'
        print self.text1



##        cursor.execute ("""
##          CREATE TABLE gridt2
##           (
##             label     CHAR(40),
##             first     CHAR(40),
##             last      CHAR(40)
##            )
##           """)
        cursor.execute ("""
          INSERT INTO gridt2 (label,first,last)
          VALUES("%s","%s","%s")"""%((self.text1),(text2),(self.text3)))
##        cursor.execute ("""
##          INSERT INTO gridt2 (first)
##          VALUES("%s")"""%(self.text2))
##        cursor.execute ("""
##          INSERT INTO gridt2 (last)
##          VALUES("%s")"""%(self.text3))
         
        cursor.execute ("SELECT * FROM gridt2")

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = create(None)
    frame.Show()

    app.MainLoop()
خروجی به صورت زیر است
کد:
server version: 5.0.41-community-nt
ظ¾ط§ظٹطھظˆظ 
Traceback (most recent call last):
  File "C:\Documents and Settings\appie\Desktop\frame.pyw", line 65, in onCloseMe
    cursor.execute ("""
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 67: ordinal not in range(128)
کهtext2 به دیتا باس فرستاده میشه
self.text1  و هم چون در کلاس هست ارور میده
واین هم کد grid
کد:
# -*- coding: utf8 -*-
import wx
import wx.grid
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='tony', passwd='ppp',db='store')
curs = conn.cursor( )
##curs.execute("""
##    CREATE TABLE gridt1 (
##        label CHAR(100),
##        first CHAR(200),
##        last CHAR(200)
##    )
##""")
ted='TED'
ted=eval(u'ted')
##curs.execute ("""
##            INSERT INTO  gridt(label)
##            VALUES("%s")"""%(ted))
##curs.execute("""
##        INSERT INTO gridt1 VALUES('L1','FirstGrid','LastGrid')
##""")
curs.execute('select * from gridt2')
dlabel=[rec[0] for rec in curs.fetchall( )]
dfirst=[rec[1] for rec in curs.fetchall( )]
dlast=[rec[2] for rec in curs.fetchall( )]
#curs.execute('select first from gridt')
#dfirst=curs.fetchall( )
#curs.execute('select last from gridt')
#dlast=curs.fetchall( )
##print dfirst
print dlabel
class LineupTable(wx.grid.PyGridTableBase):
   data={}
   r=len(dlabel)
   print '<<<<<<<'
   print r
   d=0
   while d!=r:
     strlb=str(dlabel[d])
     strfr=str(dfirst[d])
     strls=str(dlast[d])
     strlb=unicode(strlb,'utf8')
     strfr=unicode(strfr,'utf8')
     strls=unicode(strls,'utf8')
     data[d]=(strlb,strfr,strls)
     d+=1

##     data[d]=(dlabel[d],dfirst[d],dlast[d])
     
##   h=len(dlabel)
##   
##   f=str(data[h-1])
       
##   l=unicode(f,'utf8')
##   ll=str(dlabel[58])
##   ll=unicode(ll,'utf8')
##   data[58]=(ll,'test','test')
##   print data[57] 
##
##   print data
##   print len(data)
   colLabels = ("Last", "First")
   def __init__(self):
       wx.grid.PyGridTableBase.__init__(self)
   def GetNumberRows(self):
       return len(self.data)
   def GetNumberCols(self):
       return len(self.data[0]) - 1
   def GetColLabelValue(self, col):
       return self.colLabels[col]
   def GetRowLabelValue(self, row):
       return self.data[row][0]
   def IsEmptyCell(self, row, col):
       return False
   def GetValue(self, row, col):
       return self.data[row][col + 1]
   def SetValue(self, row, col, value):
       pass
class SimpleGrid(wx.grid.Grid):
   def __init__(self, parent):
       wx.grid.Grid.__init__(self, parent, -1)
       self.SetTable(LineupTable())
class TestFrame(wx.Frame):
     def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "A Grid",
              size=(275, 275))
        grid = SimpleGrid(self)
if __name__ == '__main__':
  app = wx.PySimpleApp()
  frame = TestFrame(None)
  frame.Show(True)
  app.MainLoop()
البته اینا مربوط به ویندوزه چکار کنم تا
1-اطلاعات را از فرم فارسی یا انگلیسی بخونم و در mysql ذخیره کنم
2-در mysql اطلاعات را به صورت درست مشاهده کنم
3-از اون با wx یا مثل اون لیستگیری کنم
فکر کنم coding ویندوز و لینوکس فرق داشته باشه برای هر دو این کارو می خوام بکنم راهنمایی کنید

خارج شده است
بیاضی
مدیر سایت
یه دنگ از سایت به نامشه
*****

امتیاز: 81
آنلاین آنلاین

تعداد ارسال: 1507


Y4nliz
ديدن مشخصات WWW آدرس ايميل
« پاسخ #1 : نوامبر 09, 2009, 19:27:58 pm »

سلام
از استاندارد یونیکد استفاده بکنید مشکلاتتون حل می شه .
برای مثال واسه مقدار دهی از همچین دستوری استفاده کنید :


کد:
self.text1 = u'پايتون'

یا

کد:
self.text1 = unicode('پايتون', 'utf8')
خارج شده است

برگ در انتهای زوال می افتد و میوه در انتهای كمال بنگریم كه چگونه می افتیم؟ چون برگی زرد یا سیبی سرخ!
fatan
کاربر جدید
*

امتیاز: 0
آفلاین آفلاین

تعداد ارسال: 34


ديدن مشخصات آدرس ايميل
« پاسخ #2 : نوامبر 15, 2009, 00:21:30 am »

کاری که شما گفتین را کردم این ارور را میده
کد:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 67-72: ordinal not in range(128)
خارج شده است
apache
مدیر انجمن ها
کاربر نیمه فعال
*****

امتیاز: 6
آفلاین آفلاین

تعداد ارسال: 59

apache_2o0o6
ديدن مشخصات آدرس ايميل
« پاسخ #3 : نوامبر 17, 2009, 22:37:47 pm »

سلام
فکر کنم این صفحه مشکل شما رو کاملا حل کرده
http://www.saltycrane.com/blog/2008/11/python-unicodeencodeerror-ascii-codec-cant-encode-character/
البته به قول خودمون کلک رشتی زده و از تایپ مخصوص رشته های ماژول django استفاده کرده،
به هر حال اونجا خیلی بهتر و با مثال توضیح داده

اگر بازم مشکلی داشتید خجالت نکشید
خارج شده است

اولین و بزرگترین وبسایت آموزش پایتون به زبان فارسی
www.pylearn.com
fatan
کاربر جدید
*

امتیاز: 0
آفلاین آفلاین

تعداد ارسال: 34


ديدن مشخصات آدرس ايميل
« پاسخ #4 : نوامبر 18, 2009, 23:45:35 pm »

من با  ویندوز کار می کنم و امکان اینو ندارم که جانگو نصب کنم و فکر کنم کار درستی هم نباشه
روش ساده تری نیست
این اشکال من شاید مربوط به mysql بشه
من تو این کار موندم و به کمک احتیاج دارم  
خارج شده است
apache
مدیر انجمن ها
کاربر نیمه فعال
*****

امتیاز: 6
آفلاین آفلاین

تعداد ارسال: 59

apache_2o0o6
ديدن مشخصات آدرس ايميل
« پاسخ #5 : نوامبر 19, 2009, 01:20:02 am »

نه به هر حال مشکل از mysql نیست

مشکل از متدهای مخصوص تایپ رشته ی پایتون هست، بخصوص وقتی می خواد یه رشته جدید درست کنه
و این دقیقا کاری هست که تابع input انجام می ده، یا هر تابع دیگه ای که از ورودی می خونه

مثلا قسمتهایی از Wx که توی جعبه های متنی رو می خونن

به هر حال به نظرم اونجا که داری کوئری میدی بهتری رشته رو یونیکد کنی
یه مثال ساده نوشتم

خط اول این مثالم بالای فایلت باشه خوبه  67
کد:
# -*- coding: utf-8 -*-
s = 'س'
print 's=',unicode (s,'utf-8')

a = unicode('آ', 'utf-8')
print 'a=',a

multiple = u"""

سلام حال شما خوبه؟

"""
print multiple




خارج شده است

اولین و بزرگترین وبسایت آموزش پایتون به زبان فارسی
www.pylearn.com
علیرضا موسوی
مدیر سایت
بابا حرفه ای
*****

امتیاز: 102
آفلاین آفلاین

تعداد ارسال: 480



ديدن مشخصات
« پاسخ #6 : نوامبر 20, 2009, 11:19:13 am »

و

فرستادن عبارات فارسی به دیتابیس

 
خارج شده است
Cryptonomicon
کاربر جدید
*

امتیاز: 1
آفلاین آفلاین

تعداد ارسال: 10


ديدن مشخصات
« پاسخ #7 : نوامبر 22, 2009, 00:00:59 am »

http://farmdev.com/talks/unicode/
خارج شده است
صفحه: [1]
  چاپ صفحه  
 
پرش به :