>

파이썬 3에서 읽으려고하는 hkscs 데이터 세트가 있습니다. 아래 코드

encoding = 'big5hkscs'
lines = []
num_errors = 0
for line in open('file.txt'):
    try:
        lines.append(line.decode(encoding))
    except UnicodeDecodeError as e:
        num_errors += 1

오류 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 0: invalid start byte 가 발생합니다. . 데이터 세트에 코드가 디코딩 할 수없는 UTF-8이 아닌 문자가있는 것처럼 보입니다.

errors = ignore 를 추가하려고했습니다.  이 줄에 lines.append(line.decode(encoding, errors='ignore'))

그러나 문제가 해결되지 않습니다.

누구든지 제발 제안 해 주시겠습니까?

  • 답변 # 1

    텍스트 파일에 기본 인코딩이 아닌 인코딩으로 인코딩 된 텍스트가 포함 된 경우 디코딩 오류를 방지하기 위해 파일을 열 때 인코딩을 지정해야합니다.

    encoding = 'big5hkscs'
    path = 'file.txt'
    with open(path, 'r', encoding=encoding,) as f:
        for line in f:
            # do something with line
    
    

    또는 이진 모드로 파일을 열고 나중에 텍스트를 디코딩 할 수 있습니다 :

    encoding = 'big5hkscs'
    path = 'file.txt'
    with open(path, 'rb') as f:
        for line in f:
           decoded = line.decode(encoding)
           # do something with decoded text
    
    

    질문에서, 파일은 인코딩을 지정하지 않고 열리므로 내용은 기본 인코딩으로 자동으로 디코딩됩니다-분명히 UTF-8입니다.

  • 답변 # 2

    내가 그렇지 않으면 except 를 추가하십시오  조항 except UnicodeDecodeError as e 잘 작동합니다

    encoding = 'big5hkscs'
    lines = []
    path = 'file.txt'
    with open(path, encoding=encoding, errors='ignore') as f:
        for line in f:
            line = '\t' + line
            lines.append(line)
    
    

  • 답변 # 3

    snakecharmerb의 대답은 정확하지만 설명이 필요할 수도 있습니다.

    원래 질문에 쓰지 않았지만 for 에 오류가 있다고 가정합니다.  선. 이 줄에서 UTF-8 (아마도 Windows의 환경이 아닌 환경의 기본값)에서 파일을 디코딩하지만 나중에 다시 디코딩하려고합니다. 따라서 오류는 big5hkscs 디코딩에 관한 것이 아닙니다. 파일을 텍스트로 여는 방법에 대해 설명합니다.

    snakecharmerb(두 번째 부분)의 좋은 대답에서와 같이 파일을 바이너리로 열어야하므로 텍스트를 디코딩하지 않고 line.decode(encoding) 로 텍스트를 디코딩 할 수 있습니다 . 참고 : 바이너리 파일에서을 읽을 수 있는지 잘 모르겠습니다. 이런 식으로 여전히 오류를 잡을 수 있습니다 (예 : 메시지를 작성합니다. 다른 일반적인 방법은 open() 에서 디코딩하는 것입니다.  시간이 흐르면 ​​폴백 기능을 잃어 버리고 사용자에게 더 나은 오류 메시지 (예 : 줄 번호)를 얻을 수 있습니다.

  • 이전 transferArrayItem을 사용한 각도 드래그 앤 드롭은 필터링시 잘못된 인덱스 번호를 가리 킵니다 (작업 예제)
  • 다음 casting - 맵> 클래스 바인딩에 대한 Groovy AS 키워드