여기에 텍스트 인코딩 및 디코딩과 관련된 문제가 있습니다.
파일에서 '문자열'또는 '바이트'를 찾고 파일 경로를 반환하는 코드를 작성하려고합니다.
현재 내가 여는 파일은 'windows-1252'또는 'cp-1252'의 인코딩이 있으므로 다음을 시도해 왔습니다. 1. 내 문자열을 파일의 인코딩에 해당하는 바이트로 인코딩 2. 파일과 일치 해당 파일의 경로를 가져옵니다.
'windows-1252'또는 'cp-1252'인코딩이있는 'f'와 같은 파일이 있습니다. 중국어로 된 텍스트가 포함됩니다.'[跑Online農場]'
with open(os.path.join(root, filename), mode='rb') as f:
text = f.read()
print(encoding(text)) # encoding() is a separate function that I wrote that returns the encoding of the file
print(text)
Windows-1252
b'\x00StaticText\x00\x00\x12\x00[\xb6]Online\xb9A\xb3\xf5]\x00\x01\x00\x ...
보시다시피 '이진'텍스트 [跑Online農場]
는 다음과 같습니다.[\xb6]Online\xb9A\xb3\xf5]
그러나 재미있는 점은 문자열을 문자 그대로 바이트로 변환하면 다음과 같은 결과를 얻을 수 있다는 것입니다.
enter_text = '[跑Online農場]'
print(bytes(enter_text, 'cp1252'))
UnicodeEncodeError: 'charmap' codec can't encode character '\u8dd1' in position 1: character maps to <undefined>
반면에
with open(os.path.join(root, filename), mode='r', encoding='cp-1252') as f ...
나는 얻다:
StaticText [¶]Online¹A³õ] €?‹ Œ î...
이는 내가 '번역'얼마나 확실하지 오전 '[跑Online農場]'
에 '[¶]Online¹A³õ]'
. 이에 대한 답변으로 문제가 해결 될 수도 있습니다.
파이썬이 반환하는 'rb'바이트와 일치하도록 중국어 / 외국 문자를 올바르게 '인코딩'하려면 어떻게해야합니까?
감사합니다!
귀하의 encoding
CP1252 확실히 파일의 코덱이 아마 CP950,하지만 : 기능은 잘못된 것입니다.
참고 : 주어진 바이트 문자열의 인코딩을 추측하는 것은 항상 근사치입니다. 확실히 인코딩을 결정하는 안전한 방법은 없습니다.
다음과 같은 바이트 문자열이있는 경우
b'[\xb6]Online\xb9A\xb3\xf5]'
그리고 당신은 그것을 번역해야한다는 것을 알고 있습니다.
'[跑Online農場]'
그런 다음 몇 가지 코덱으로 시행 착오를 할 수 있습니다.
파이썬 에서 지원하는 코덱 목록을 사용하여 중국어 코덱을 검색했습니다.
CP-1252 (Latin-1의 Windows 버전)를 사용하면 모지 베이크를 얻을 수 있습니다.
>>> b'[\xb6]Online\xb9A\xb3\xf5]'.decode('cp1252')
'[¶]Online¹A³õ]'
CP-950 (중국어 번체 용 Windows 코드 페이지)을 사용할 때 예상되는 출력이 표시됩니다.
>>> b'[\xb6]Online\xb9A\xb3\xf5]'.decode('cp950')
'[跑Online農場]'
따라서 파일을 읽으려면 CP-950을 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다