파일에 쓸 때 UnicodeEncodeError

Reynoldsnlp

내 로컬 컴퓨터 (OS X)에서 잘 작동하는 python 스크립트가 있지만 서버 (Debian)에 복사했을 때 예상대로 작동하지 않습니다. 스크립트는 xml 파일을 읽고 내용을 새 형식으로 인쇄합니다. 내 로컬 컴퓨터에서 stdout을 사용하여 터미널이나 파일 (예 :)에 스크립트를 실행할 수 > myFile.txt있으며 둘 다 잘 작동합니다.

그러나 서버 ( ssh)에서 터미널로 인쇄하면 모든 것이 잘 작동하지만 파일로 인쇄하면 (정말 필요한 것입니다) UnicodeEncodeError : UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128). 모든 파일은 utf-8 인코딩이며 utf-8은 매직 주석에서 선언됩니다.

str목록 안에 객체를 인쇄하면 (일반적으로 인코딩 문제를 처리하는 데 사용하는 트릭 임) 동일한 오류가 발생합니다.

를 사용 print( x.encode('utf-8') )하면 코드 스타일 비트 (예 :)를 인쇄합니다 b'1' b'\xd0\x9a\xd0\xb0\xd0\xbc\xd0\xb0'.

내가 $ export PYTHONIOENCODING=utf-8쉘에 있으면 (일부 SO 게시물에서 제안한대로) 바이너리 파일을 얻습니다 1 <D0><9A><D0><B0><D0><BC><D0><B0>..

모든 locale변수를 확인 했으며 관련 변수가 로컬 컴퓨터에있는 것과 일치합니다.

파일을 로컬에서 간단히 처리하고 업로드 할 수 있지만 여기서 무슨 일이 일어나고 있는지 정말 이해하고 싶습니다. 파이썬 코드가 한 컴퓨터에서 작동하기 때문에 관련성이 있는지 확실하지 않지만 아래에 추가합니다.

# -*- encoding: utf-8 -*-
import sys, xml.etree.ElementTree as ET

corpus = ET.parse('file.xml')
text = corpus.getroot()
for body in text :
  for sent in body :
    depDOMs = [(0,'') for i in range(len(sent)+1)]
    for word in sent :
      if word.tag == 'LF' :
        pass
      elif 'ID' in word.attrib and 'FEAT' in word.attrib and 'DOM' in word.attrib :
        ID = word.attrib['ID']
        try :
          Form =  word.text.replace(' ','_')
        except AttributeError :
          Form = '_'
        try :
          Lemma =  word.attrib['LEMMA'].replace(' ', '_')
        except KeyError :
          Lemma = '*NULL*'
        CPOS = word.attrib['FEAT'].split()[0]
        POS = word.attrib['FEAT'].replace( ' ' , '_' )
        Feats = '_'
        Head = word.attrib['DOM']
        if Head == '_root' :
          Head = '0'
        try :
          DepRel = word.attrib['LINK']
        except KeyError :
          DepRel = 'ROOT'
        PHead = '_'
        PDepRel = '_'
        try:
          if word.attrib['NODETYPE'] == 'FANTOM' :
            word.attrib['LEMMA'] = '*'+word.attrib['LEMMA']+'*'
        except KeyError :
          pass
        print( ID , Form , Lemma , Feats, CPOS , POS , Head , DepRel , PHead , PDepRel , sep='\t' )
      else :
        print( 'WARNING: what is this?',sent.attrib['ID'],word.attrib)
  print()
알라 스테 어 맥코맥

근본적인 문제는 Linux의 로케일 구성이 잘못되어 발생할 수 있습니다. 즉, 비 ASCII 문자를 인쇄 할 때 Python이 너무 조심 스러워진다는 의미입니다.

로케일 구성을 확인하십시오 locale. 문제가있는 경우 다음과 같은 내용이 표시됩니다.

$ locale 
locale: Cannot set LC_CTYPE to default locale: No such file or directory 
locale: Cannot set LC_ALL to default locale: No such file or directory 
LANG=en_US.UTF-8 
LANGUAGE= 

이 문제를 다음과 같이 수정하십시오.

$ sudo locale-gen "en_US.UTF-8"

( "en_US.UTF-8"을 작동하지 않는 로케일로 바꿉니다). 자세한 내용은 https://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue를 참조하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파일에 아시아 문자를 쓸 때 UnicodeEncodeError

분류에서Dev

파일에 쓸 때 unknownSource

분류에서Dev

파일에 쓸 때 오류

분류에서Dev

파일을 읽을 때 UnicodeEncodeError

분류에서Dev

파일에 쓸 때 이상한 동작

분류에서Dev

파일에 쓸 때 C 분할 오류

분류에서Dev

.txt 파일 Python에 쓸 때 TypeError

분류에서Dev

RandomAccessFile에 쓸 때 NullPointerException

분류에서Dev

내 DB에 쓸 때

분류에서Dev

콘솔에 쓸 때와 C로 파일에 쓸 때 출력의 차이

분류에서Dev

csv 파일에 쓸 때 파일 이름이 나뉩니다.

분류에서Dev

docx에 쓸 때 kable 공백

분류에서Dev

SearchView에서 쓸 때 SuggestionsAdapter NullPointerException

분류에서Dev

csv에 쓸 때 Python NameError

분류에서Dev

FIFO에 쓸 때 SIGPIPE 트랩

분류에서Dev

Powershell에서 파일에 출력을 쓸 때 문제

분류에서Dev

MySQL에서 파일에 쓸 때 메모리 문제

분류에서Dev

로컬 파일에 쓸 때 위도에 대한 Nil 값

분류에서Dev

Python : 파일에 쓸 때 출력 정렬 (인쇄 아님)

분류에서Dev

텍스트 파일에 쓸 때 신비한 줄 바꿈 문자

분류에서Dev

파일에 쓸 때 마지막 쉼표를 지우는 방법

분류에서Dev

파일에 csv를 쓸 때 왜 오류가 발생합니까?

분류에서Dev

이진 파일에 쓸 때 데이터 손실-C ++

분류에서Dev

텍스트 파일에 쓸 때 이상한 널 문자

분류에서Dev

파일 C에 쓸 때 \ 0 문자 무시

분류에서Dev

파일에 쓸 때 이상한 문자가 추가됨

분류에서Dev

파일에 쓸 때 jsoup 구문 분석 html 중복

분류에서Dev

txt 파일에 쓸 때 단축되는 목록

분류에서Dev

파일에 바이트를 쓸 때 데이터 손실