development

error UnicodeDecodeError : 'utf-8'코덱이 위치 0에서 바이트 0xff를 디코딩 할 수 없습니다 : 유효하지 않은 시작 바이트

big-blog 2020. 7. 26. 11:34
반응형

error UnicodeDecodeError : 'utf-8'코덱이 위치 0에서 바이트 0xff를 디코딩 할 수 없습니다 : 유효하지 않은 시작 바이트


https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools

위 사이트에서 "process.py"를 컴파일 할 때 오류가 발생했습니다.

 python tools/process.py --input_dir data --            operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png

역 추적 (가장 최근 통화) :

File "tools/process.py", line 235, in <module>
  main()
File "tools/process.py", line 167, in main
  src = load(src_path)
File "tools/process.py", line 113, in load
  contents = open(path).read()
      File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode
  (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode     byte 0xff in position 0: invalid start byte

오류의 원인은 무엇입니까? 파이썬 버전은 3.5.2입니다.


파이썬은 바이트 배열 ( bytesutf-8로 인코딩 된 문자열이라고 가정)을 유니 코드 문자열 ( str) 로 변환하려고합니다 . 이 과정은 물론 utf-8 규칙에 따른 디코딩입니다. 이 작업을 시도하면 UTF-8 인코딩 문자열 (즉, 위치 0의 0xff)에서 허용되지 않는 바이트 시퀀스가 ​​발생합니다.

우리가 볼 수있는 코드를 제공하지 않았으므로 나머지 부분 만 추측 할 수 있습니다.

스택 추적에서 트리거링 조치가 파일에서 읽은 것으로 가정 할 수 있습니다 ( contents = open(path).read()). 나는 이것을 다음과 같은 방식으로 코딩 할 것을 제안합니다.

with open(path, 'rb') as f:
  contents = f.read()

그건 b의 모드 지정에 open()파일을 바이너리로 취급되어야한다고, 그래서 contents유지됩니다 bytes. 이런 식으로 디코딩 시도가 발생하지 않습니다.


이 솔루션을 사용하면 문자를 제거하고 무시하고 문자열을 반환합니다. 변환하지 않고 제거해야하는 경우에만 사용하십시오.

with open(path, encoding="utf8", errors='ignore') as f:

를 사용하면 errors='ignore'일부 캐릭터를 잃게됩니다. 그러나 소켓 서버에 연결하는 클라이언트의 잘못된 형식 지정 및 프로그래밍에서 비롯된 추가 문자 인 것처럼 보이므로 관심이 없다면 그런 다음 쉬운 직접 솔루션입니다. 참고


이와 비슷한 문제가 있었지만 UTF-16을 사용하여 디코딩했습니다. 내 코드는 다음과 같습니다.

with open(path_to_file,'rb') as f:
    contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")

파일 내용을 가져 오기로 사용하지만 코드를 UTF 형식으로 반환합니다. 거기에서 그것은 라인에 의해 해독되고 분리 될 것이다.


동일한 오류가 발생했을 때이 스레드를 발견했습니다. 확인 할 수있는 몇 가지 연구를 수행 한 후 UTF-8 파일을 UTF-8로 디코딩하려고 할 때 발생하는 오류입니다.

UTF-16을 사용하면 첫 번째 문자 (UTF-16의 2 바이트)는 디코딩 순서 로 사용되며 디코딩 된 문자열에 문자로 표시되지 않는 BOM (Byte Order Mark) 입니다. 이는 첫 번째 바이트는 FE 또는 FF이고 두 번째 바이트는 다른 바이트입니다.

실제 답변을 찾은 후에 크게 편집


만 사용

base64.b64decode(a) 

대신에

base64.b64decode(a).decode('utf-8')

Mac에있는 경우 숨겨진 파일 (.DS_Store)이 있는지 확인하십시오. 파일을 제거한 후 내 프로그램이 작동했습니다.


인코딩 형식 ISO-8859-1 사용 하여 문제를 해결하십시오.


읽을 파일의 경로를 확인하십시오. 작업 디렉토리를 표시하도록 경로 이름을 변경할 때까지 코드에서 계속 오류가 발생합니다. 오류는 다음과 같습니다

newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

직렬 포트에서 데이터를 수신하는 경우 올바른 전송 속도 (및 다른 구성)를 사용하고 있는지 확인하십시오 : ( utf-8 )을 사용하여 디코딩 하지만 잘못된 구성은 동일한 오류를 생성합니다

UnicodeDecodeError : 'utf-8'코덱이 위치 0의 바이트 0xff를 디코딩 할 수 없습니다 : 유효하지 않은 시작 바이트

Linux에서 직렬 포트 구성을 확인하려면 다음을 사용하십시오. stty -F /dev/ttyUSBX -a


비슷한 문제가 있습니다. tensorflow / models / objective_detection에서 예제를 실행하려고 시도하고 동일한 메시지를 만났습니다. Python3을 Python2로 변경하십시오.


가능하면 텍스트 편집기에서 파일을 열고 인코딩을 UTF-8로 변경하십시오. 그렇지 않으면 OS 수준에서 프로그래밍 방식으로 수행하십시오.


HitHere, you should load the "GoogleNews-vectors-negative300.bin.gz" file at first then extract it by this command in Ubuntu: gunzip -k GoogleNews-vectors-negative300.bin.gz. [ manually extracting is never recommended]. secondly, you should apply these commands in pyrhon 3:

import gensim model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True) . I hope it will be useful.

참고URL : https://stackoverflow.com/questions/42339876/error-unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position-0-in

반응형