Nachdem ich gestern Abend schon mehrere Stunden mit der Suche nach einer Lösung verbracht habe, dabei auch viele Threads durchgearbeitet habe, und heute immer noch nicht auf einen grünen Zweig komme, wende ich mich mal wieder an Euch.
Ich habe ein kleines Tool geschrieben, welches mir auf www.dict.cc Suchworte übersetzt. Bei der Ausgabe werden die Umlaute aber immer in der Form \xfc für ü usw. ausgegeben.
Im Header der Website ist das charset mit iso-8859-1 angegeben.
Am vielversprechensten fand ich ja den Ansatz, alles erstmal nach unicode umzuwandeln und dann in mein Systemencoding zu codieren. Aber entweder gibts Fehlermeldungen oder es ändert sich nichts.
Beim debuggen habe ich gesehen, dass die Umlaute in den Übersetzungen nochmals escaped sind, bei "fürwahr" -> 'f\\xfcrwahr' -> als string ausgegeben: f\xfcwahr......
Damit ihr mir von dem Schlauch helfen könnt, kommt hier der Code:
Code: Alles auswählen
#!/usr/bin/env python
##-*- coding: cp1252 -*-
import wx, urllib2, re, locale
#systemencoding = locale.getdefaultlocale()[1]
trunk = '''http://www.dict.cc/?s='''
listReg = re.compile(r'(?:var c2Arr = new Array\()(.*)(?:\);)')
itemsReg = re.compile(r'(?:")(.*?)(?:")')
class MyFrame2(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.MAXIMIZE_BOX|wx.SYSTEM_MENU|wx.RESIZE_BORDER|wx.FRAME_TOOL_WINDOW|wx.CLIP_CHILDREN
wx.Frame.__init__(self, *args, **kwds)
self.static_sizer_staticbox = wx.StaticBox(self, -1, "translations from: www.dict.cc")
self.text_ctrl_eingabe = wx.TextCtrl(self, -1, u"zu übersetzendes Wort eingeben", style=wx.TE_PROCESS_ENTER)
self.text_ctrl_ausgabe = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_LINEWRAP|wx.TE_WORDWRAP)
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_TEXT_ENTER, self.OnEnter, self.text_ctrl_eingabe)
def __set_properties(self):
self.SetTitle("dict.cc GUI")
self.SetSize((250, 600))
self.text_ctrl_eingabe.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
self.text_ctrl_ausgabe.SetBackgroundColour(wx.Colour(232, 232, 232))
#self.text_ctrl_ausgabe.SetFont(wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, "Microsoft Sans Serif"))
def __do_layout(self):
static_sizer = wx.StaticBoxSizer(self.static_sizer_staticbox, wx.VERTICAL)
h_box_sizer = wx.BoxSizer(wx.VERTICAL)
h_box_sizer.Add(self.text_ctrl_eingabe, 0, wx.EXPAND, 0)
h_box_sizer.Add(self.text_ctrl_ausgabe, 1, wx.TOP|wx.EXPAND, 10)
static_sizer.Add(h_box_sizer, 1, wx.EXPAND, 0)
self.SetSizer(static_sizer)
self.Layout()
self.Centre()
def searchDict(self, searchstring):
url = trunk + searchstring
source = urllib2.urlopen(url).read()
#source = unicode(source, 'iso-8859-1')
answer = listReg.findall(source)
items = itemsReg.findall(str(answer))
# for i in items:
# re.sub(r'\\\\', r'\\', str(i))
return items
def OnEnter(self, event):
self.text_ctrl_ausgabe.Clear()
searchstring = self.text_ctrl_eingabe.GetValue()
self.text_ctrl_ausgabe.WriteText(u'\nÜbersetzungen für "%s":\n' % searchstring)
items = self.searchDict(searchstring)
if len(items) > 28:
del items[29:]
for i in items:
if i != "":
print i
self.text_ctrl_ausgabe.WriteText('\n - %s' %i)
self.text_ctrl_eingabe.Clear()
event.Skip()
if __name__ == "__main__":
translator = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_3 = MyFrame2(None, -1, "")
translator.SetTopWindow(frame_3)
frame_3.Show()
translator.MainLoop()
Hat jemand einen Tipp, wo der Hund begraben liegt?
Einen schönen Sonntag wünscht DocFisher