Python을 사용하여 네트워크 로그 파일을 구문 분석할 계획입니다.
한자 깨짐 문제가 불가피하게 발생했습니다.
저는 Java를 배웠는데 Python을 사용하여 한자 깨짐 문제를 어떻게 해결하는지 잘 모르겠습니다.
Java에서 디버깅을 통과한 코드가 Python 환경에 배치되면 화가 납니다.
많은 노력 끝에 마침내 오시나의 도움으로 문제가 해결되었습니다.
파이썬 인코딩의 주요 아이디어는 다음과 같습니다.
1. 문자열
2. 유니코드
3. 대상 인코딩 세트(CP936, GB2312, GBK , GB18030은 서로 직접 변환이 가능한 것으로 보이며 대부분의 인코딩이 동일합니다)
파이썬의 시스템 인코딩 구조를 이해하려면 먼저 다음 코드를 살펴보세요.
import locale def p(f): print '%s.%s(): %s' % (f.__module__, f.__name__, f()) # 返回当前系统所使用的默认字符编码 p(sys.getdefaultencoding) # 返回用于转换Unicode文件名至系统文件名所使用的编码 p(sys.getfilesystemencoding) # 获取默认的区域设置并返回元祖(语言, 编码) p(locale.getdefaultlocale) # 返回用户设定的文本数据编码 # 文档提到this function only returns a guess p(locale.getpreferredencoding) # \xba\xba是'汉'的GBK编码 # mbcs是不推荐使用的编码,这里仅作测试表明为什么不应该用 print r"'\xba\xba'.decode('mbcs'):", repr('\xba\xba'.decode('mbcs')) #在笔者的Windows上的结果(区域设置为中文(简体, 中国)) #sys.getdefaultencoding(): gbk #sys.getfilesystemencoding(): mbcs #locale.getdefaultlocale(): ('zh_CN', 'cp936') #locale.getpreferredencoding(): cp936 #'\xba\xba'.decode('mbcs'): u'\u6c49'