2012-03-26 7 views
0

여기 내 전체 코드이며, ASCII와 함께 잘 작동하지만, 사진에서 "유니 코드"부르는 것들은을 때 ... 나는이 알고 내 인생 ...파이썬 유니 코드 디코딩 인코딩

싫어 영어가 아니지만 설명해 드리겠습니다.

2 개의 입력 파일 (realmek, nevek)과 1 개의 결과 파일 (osszes)이 있습니다.

(html)에 작업 페이지가 있습니다.

  • ANSI 문자로 말했듯이 이것은 효과적입니다.

그러나 이상한 종류의 기계를 사용하려고하면 : "űáéđĐ"유니 코드에는 2 개의 입력 파일과 1 개의 출력 파일을 저장해야합니다. 그러나 내 프로그램보다 "인코딩 디코딩"오류가 발생합니다. 그리고 나는 그것이 정상임을 안다.

제 질문은 : 어떻게 해결할 수 있습니까? 어디에서 디코딩 인코딩을 처리해야합니까?

나는 이것을 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

가 정의 "작동하지 않습니다 ". 예기치 않은 결과, 예외, 크래시가 발생합니까? 질문에 오류 세부 정보를 수정하십시오. –

+0

UNICODE 문자가 같은 위치에 있지 않기 때문에 오류가 발생하지 않습니다. 예를 들어 다음과 같습니다. mapo = lapn [1087] ASNII에서 '16'을 입력하고 UNICODE 소스 입력으로 : unicode stings ... 그리고 내가 사용하기 전에 해독 할 필요가있는 곳. 그래서 문제가 아니라 오류인지 알고 있기 때문에 문제는 인코딩이지만 문제는 어디에 인코딩해야하는지 모르겠다. 먼저 입력. – user1292883

+0

나는 그것들과 같은 몇 가지 문제가 있었고 나는 해결했다. 인코딩은 일종의 방식으로 매우 문제가됩니다. 내 질문에 대해 살펴보고 제안을 추출해보십시오. 행운을 빕니다! – DonCallisto

답변

2

일반 열기 대신 codecs.open을 사용하여 파일을 읽고 씁니다. 그들은 사용할 인코딩을 지정하는 데 사용하는 선택적 인수를 사용합니다. ASCII 문자가 아닌 텍스트를 올바르게 읽고 (인쇄본 내에서 유니 코드로 표시됨) 읽고 나중에 을 조정해야하는 정규 표현식을 사용하고 있는지 확인하십시오. 당신이 당신의 파이썬 소스에 비 ASCII 문자를 사용하는 경우

또한, 첫 번째 또는 두 번째 라인으로 이런 일을 추가하여 스크립트의 인코딩을 선언

# -*- coding: utf-8 -*- 
관련 문제