2016-11-01 7 views
0

私はUnicode日本語を書いたファイルを持っており、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開くシフトJISではない、と私は代わりに、日本人のmiscの文字を見たときにそれはことを除いて動作します。ファイルのエンコーディングを手動でShift-JISに変更すると、その他の文字が正しい日本語文字に変換されます。私のプログラムでファイルをShift-JISとして作成するにはどうしたらいいですか?

+0

あなたは[MCVE] [尋ねる]と読むことをお勧めします。 – boardrider

+0

これは、出力ファイルを読み込むためのコードではなく、Shift-jisエンコードされたテキストをうまく書き出すコードではなく、どのように出力ファイルを開いているかに関係する問題です。どのテキストエディタを使用してもエンコーディングは正しく検出されませんが、ファイルやそれを作成するコードに問題はありません。 – Blckknght

答えて

0

「ANSI」は、ローカライズされたデフォルトのエンコーディングのMicrosoftの用語です。使用されるローカライズされたWindowsのバージョンによって異なります。メモ帳などの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) 
関連する問題