2017-02-08 6 views
1

Linuxで同じコードがうまく動作する理由は誰か教えてください。同じコードをエンコードしたファイルWindows、Linux

次のコードは、各OS上で実行されました:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1: character maps to <undefined> 
をしかし、Linux上ですべてがうまく働い::

Windowsのエラーで
print("Output :" + open("data.txt", "r").read()) 

を上げた

Output :☀♠☂ 

です問題?

+0

'print(sys.getdefaultencoding())'は面白いでしょう。 – tdelaney

答えて

5

あなたのファイルはUTF-8だと思いますが、これはLinuxではデフォルトのエンコーディングですが、Windowsではそうではありません。指定されていない場合は、デフォルトのエンコーディングが使用されます。

open("data.txt", "r", encoding="utf-8") 

(あなたは、Pythonの下"rb"を指定した場合としてPython 2とPython 3つのハンドル物事は違っのPython 2では、あなたは、生のバイトを取得したいところ、これがあることに注意してください:。

は、明示的にエンコーディングを渡して考えてみましょう3.)

+0

実際にPython 2ではWindowsの '" r "'モードは '" \ r \ n "'を '' \ n "'に変換します。 Windows上でrawバイトを取得するには '' rb ''モードが必要です。 – eryksun

+0

@eryksun:はい、これは「ユニバーサル改行」です。 – 9000

+0

これは '' rU ''モードではない、つまり* universal *(クロスプラットフォームのような)改行モードでの読み込みです。これはPython固有のものです。これは、Windows標準I/O 'FILE'ストリームを使用した通常のテキストモード、つまり' 'r" 'モードのデフォルトの' 'rt" 'モードです。 – eryksun

関連する問題