Unicode-декодирование Python - PullRequest
0 голосов
/ 26 марта 2012

Вот мой полный код, и он отлично работает с ASCII, но когда на изображении появляются символы "Юникод" ... Я ненавижу свою жизнь ...

Я знаю, что это не английский, но позвольте мне объяснить:

У меня есть 2 входных файла (realmek, nevek) и 1 файл результатов (osszes).

У меня есть рабочая страница (html).

  • Как я уже говорил с символами ANSI, это работает.

НО, когда я пытаюсь использовать странные символы: "đĐáé save" мне нужно сохранить 2 входных и 1 выходной файлы в UNICODE. Но затем моя программа отбрасывает ошибку «декодирования кодирования». И я знаю, что это нормально.

Итак, мой вопрос: Как я могу решить это? где мне нужно обрабатывать декодирование кодирования?

Я думаю об этом в течение 3 дней ... Я пробовал много декодировать, например, "u = unicode (s," utf-8 ")"; $ export LANG = en_US.UTF-8; и т.д. Но это не сработало.

from urllib import urlopen
import re

faj = "hiba"
cast = "hiba"
pont = 0
szint = 0

fj = open("C:\Users\Rendszergazda\Desktop\Achievements\Realmek.txt", "r")
tombr = fj.readline()
realmek = tombr.split(" ")
fj.close()

fh = open("C:\Users\Rendszergazda\Desktop\Achievements\Nevek.txt", "r")
tomb = fh.readline()
nevek = tomb.split(" ")
fh.close()

osszes = open("C:\Users\Rendszergazda\Desktop\Achievements\Osszes.txt", "a")

for x in realmek:
    realm = x
    for y in nevek:
        nev = y
        lap = urlopen("http://eu.battle.net/wow/en/character/"+str(realm)+"/"+str(nev)+"/achievement").read()
        letezik = re.compile('<div id="server-erro(.*)">')
        letez = re.findall(letezik,lap)
        if (letez != []):   
            a = 0    
        else:

            lapn = lap.split("\n")      
            mapo = lapn[1087]
            pontos = re.compile('\t\t\t\t\t(.*)\r')
            pont = re.findall(pontos,mapo)

            mapom = lapn[1322]
            feastn = re.compile('<div class="bar-contents">\t\t\t\t\t\t\t\t\t\t\t\t(.*)\r')
            feast = re.findall(feastn,mapom)

            fajkeres = re.compile('</strong></span> <a href="/wow/en/game/race/(.*)" class="race">')
            castkeres = re.compile('</a> <a href="/wow/en/game/class/(.*)" class="class">')
            szintkeres = re.compile('<span class="level"><strong>(.*)</strong></span> <a href="/wow/en/game/')

            faj  = re.findall(fajkeres,lap)
            cast = re.findall(castkeres,lap)
            szint = re.findall(szintkeres,lap)        
            link = "http://eu.battle.net/wow/en/character/"+str(realm)+"/"+str(nev)+"/advanced"

            ccast = cast [0]
            ffaj = faj [0]
            sszint = szint [0]
            ppont = pont [0]
            ffeast = feast [0]

            osszes.write(str(nev)+" "+str(realm)+" "+str(ppont)+" "+str(ffeast)+" "+str(ffaj)+" "+str(ccast)+" "+str(sszint)+" "+str(link)+"\n")      

osszes.close()

1 Ответ

2 голосов
/ 26 марта 2012

Вместо простого открытия используйте codecs.open для чтения и записи файла. Они принимают необязательный аргумент, который вы используете, чтобы указать, какую кодировку использовать. Убедитесь, что вы можете правильно читать, печатать и писать текст не в формате ascii (он будет рассматриваться как юникод в вашем скрипте), а затем проверять, используете ли вы какие-либо регулярные выражения, требующие корректировки.

Кроме того, если вы используете какие-либо символы, отличные от ascii, в исходном коде python, объявите кодировку вашего сценария, добавив что-то вроде этого в первой или второй строке:

# -*- coding: utf-8 -*-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...