2016-11-01 7 views
0

유니 코드 일본어를 쓰는 파일이 있는데이 파일을 Shift-JIS로 변환하여 Shift-JIS로 인코딩 된 파일로 출력하고 싶습니다. 나는이 작업을 수행 :Python 3 : 내 unicode2shift-jis 스크립트는 ASCII 파일 쓰기를 제외하고 작동합니다. 왜?

with open("unikanji.txt", 'rb') as unikanjif: 
    unikanji = unikanjif.read() 

sjskanji = unikanji.decode().encode('shift-jis') 

with open("kanji.txt", 'wb') as sjskanjif: 
    sjskanjif.write(sjskanji) 

나는 항상시키는 ANSI 파일로 열립니다 kanji.txt 열기가 Shift-JIS하지, 내가 대신 일본어의 기타 문자를 볼 때이 점을 제외하고 작동합니다. 수동으로 파일 인코딩을 Shift-JIS로 변경하면 기타 문자가 올바른 일본어 문자로 바뀝니다. 프로그램에서 Shift-JIS로 파일을 만드는 방법은 무엇입니까?

+0

[ask] 및 [mcve]를 읽을 수 있습니다. – boardrider

+0

이 코드는 Shift-jis로 인코딩 된 텍스트를 잘 작성하는 코드가 아닌 출력 파일을 읽는 방법과 관련된 문제입니다. 사용중인 텍스트 편집기가 인코딩을 올바르게 감지하지 못하더라도 파일이나 파일을 만드는 코드에 문제가 없습니다. – Blckknght

답변

0

"ANSI"는 사용 된 지역화 된 버전의 Windows에 따라 달라지는 기본 지역화 된 인코딩에 대한 Microsoft 용어입니다. 메모장과 같은 Microsoft 프로그램은 바이트 순서 표시로 시작하지 않는 한 텍스트 파일의 인코딩에 대해 "ANSI"로 간주합니다. Microsoft 메모장은 UTF-8, UTF-16LE 및 UTF-16BE BOM을 인식합니다.

Shift-JIS는 지역화 된 인코딩이므로 Notepad ++와 같은 편집기를 사용하고 수동으로 Shift-JIS로 구성해야합니다. 으로 작성한 파일은 Shift-JIS로 인코딩되었지만 사용하는 편집기가 인코딩을 감지 할 수있는 방법이 없으면 수동으로 구성해야합니다. 또한 현재 Windows 버전에서 일본어 Windows를 사용하거나 현지화 기본값을 변경할 수 있으며 Shift-JIS가 ANSI 기본값 일 수 있습니다.

한편 인코딩 변환은 좀 더 간단 할 수 있습니다. 아래에서는 원본 파일이 UTF-8이고 대상 파일이 shift-jis라고 가정합니다. utf-8-sig은 자동으로 바이트 순서 표시를 처리하고 제거합니다 (있는 경우).

with open('unikanji.txt',encoding='utf-8-sig') as f: 
    text = f.read() 

with open('kanji.txt','w',encoding='shift-jis') as f: 
    f.write(text)