質問: " " ### 補足情報(言語/FW/ツール等のバージョンなど) Pythonは初心者です。 Anaconda 5.0.1 Visual Studio 2015, 2017ともに同じ表示です。
回答: テキストエディタで開いた際、多くの場合、エンコーディングが表示されるので、それを参考にするとよいかと思います。(エンコーディングの扱いに慣れている場合は、バイナリエディタで見た方が原因がはっきり分かりますが・・) ※BOM無しの場合は、ファイルの先頭付近に日本語などが含まれていない場合、ASCII、Shift-JIS、Utf-8等の判定材料が無いので、エンコーディングの判定で失敗する場合もあります。 今回の質問の場合、ファイルを開く`f_in = open(filelistname, 'r')`の段階でエンコードに配慮する必要があるかと思います。 似たようなサンプルが、Stackoverflowなどにありますので、参考にされるとよいかと思います。 Stackoverflow - Character reading from file in Python Qiita - pythonでUTF8のテキスト処理 例: utf-8の場合 `f_in = codecs.open(filelistname, 'r', encoding='utf-8')` (modeのデフォルトは'r'ですが、説明のために足しておきました) 1行目の`-*- coding:shift-jis -*-`は、プログラムのソースファイルのエンコードがShiftJISの場合の設定です。 linelist が既に文字化けしていると思いますので、linelistに対して`codecs.open(...)`やなどを試した場合も、結果は変わらないと思います。 参考になれば。 追記: BOM (バイトオーダーマーク)というのは、エンコーディングなどを示すためにファイル先頭に付けるマークで、その並び順でLE (リトルエンディアン)か、BE (ビッグエンディアン)かの判定にも使われます。 問題は、BOMが付いていない場合で、この場合はファイルの先頭付近の内容から、エンコーディングが推測されます。 大雑把に分類すると、 英字が1バイト:ASCII、shift-jis、utf-8など 英字が2バイト:utf-16など ※utf-16などの場合、バイナリエディタなどで見ると、アルファベットの間に0x00が挟まっているかと思います。 0x00~0x7fしか存在しない:ASCII (または shift-jis) 0x81など、0x00~0x7f以外の値が含まれる:shift-jis、utf-8など ※shift-jisの場合は、日本語を2バイトで表す場合の1バイト目など 詳細は文字コード表を参考にするとよいかと思います。 参考: UCS-2 および UCS-2 とユニコードの関係 https://www.ibm.com/support/knowledgecenter/ja/ssw_i5_54/nls/rbagsucs2.htm Unicode対応 文字コード表 (と解説) http://ash.jp/code/unitbl21.htm