2017-02-08 3 views
-1

문자 인코딩에 문제가 있습니다.파이썬을 사용하여 UTF 문자를 대체하는 방법은 무엇입니까?

enter image description here

질문 :

  1. 인코딩의이 유형은 무엇입니까 그것은 이런 일이 발생하는 이유는 내 .txt 인 파일을 열 때 이해하기 좀있어? 왜 이런 일이 일어나는가?

  2. 일반 악센트 또는 악센트 및 특수 문자 없이도 txt 파일을 다시 쓸 수 있습니까?

  3. 처리 할 특수 라이브러리가 있습니까? 나는이 모든 문자들을 대체 할 거대한 함수를 만들 수 있지만, 미래의 txts에 언제 어떤 문자가 나타날지 모른다.

내 코드 :

folder = 'E:\\WinPython\\notebooks\\scripts\\script1\\' 
txtFile = folder + 'PROF_SAI_318_210117_310117_orig.txt' 

with open(txtFile, 'r') as f: 
    with open('PROF_SAI_318_210117_310117_clean.txt', 'w') as g: 
     for line in f: 
      do_something() # what should I write here to 'clean' my file? 
      g.write(line) 

print("Ok!") 

출력 발췌 : 당신이 당신의 파일을 표시하는 메모장 + +를 사용하는 것처럼

SPLEONARDO SIM\xc3\x83O ESTARLING 
GOFLORESTA S/A A\xc3\x87UCAR E ALCOOL 
SPFOCO REPRESENTA\xc3\x87\xc3\x95ES E CONSULTORIA 

답변

1

것 같습니다. cp1252 같은 인코딩 표시 외모 :

>>> b'COMUNICA\xc7\xc3O M\xc1QUINAS'.decode('cp1252') 
'COMUNICAÇÃO MÁQUINAS' 

메모장에서 ++, 메뉴에 Encoding->Character sets->Western European->Windows-1252를 선택하고 파일이 제대로 표시됩니다. 여기

는 UTF-8 (당신의 출력 발췌)로 변환 예제 : 귀하의 예제 코드에 대한

>>> b'SPLEONARDO SIM\xc3O ESTARLING'.decode('cp1252') 
'SPLEONARDO SIMÃO ESTARLING' 
>>> b'SPLEONARDO SIM\xc3O ESTARLING'.decode('cp1252').encode('utf8') 
b'SPLEONARDO SIM\xc3\x83O ESTARLING' 

, 당신은 할 수 있습니다 :

with open(txtFile, 'r', encoding='cp1252') as f: 
    with open('PROF_SAI_318_210117_310117_clean.txt', 'w', encoding='utf8') as g: 
     for line in f: 
      g.write(line) 

를 파일이 너무 크지 않은 경우 할 수 있습니다 :

with open(txtFile, 'r', encoding='cp1252') as f: 
    with open('PROF_SAI_318_210117_310117_clean.txt', 'w', encoding='utf8') as g: 
     g.write(f.read()) 
+0

와우. 많은 감사합니다! 내가 직면하고있는 인코딩 유형을 이해하는 데 사용할 수있는 힌트 또는 치트 시트가 있는지 알고 계십니까? 어떻게 그것이 cp1252라고 생각 했습니까? –

+0

@ dot.Py cp1252는 미국 및 서유럽 Windows에서 일반적이므로 좋은 추측입니다. –

관련 문제