回答編集履歴
2
情報を追加
answer
CHANGED
@@ -17,4 +17,24 @@
|
|
17
17
|
---
|
18
18
|
linelist が既に文字化けしていると思いますので、linelistに対して`codecs.open(...)`やなどを試した場合も、結果は変わらないと思います。
|
19
19
|
|
20
|
-
参考になれば。
|
20
|
+
参考になれば。
|
21
|
+
|
22
|
+
---
|
23
|
+
追記:
|
24
|
+
BOM (バイトオーダーマーク)というのは、エンコーディングなどを示すためにファイル先頭に付けるマークで、その並び順でLE (リトルエンディアン)か、BE (ビッグエンディアン)かの判定にも使われます。
|
25
|
+
|
26
|
+
問題は、BOMが付いていない場合で、この場合はファイルの先頭付近の内容から、エンコーディングが推測されます。
|
27
|
+
大雑把に分類すると、
|
28
|
+
英字が1バイト:ASCII、shift-jis、utf-8など
|
29
|
+
英字が2バイト:utf-16など
|
30
|
+
※utf-16などの場合、バイナリエディタなどで見ると、アルファベットの間に0x00が挟まっているかと思います。
|
31
|
+
|
32
|
+
0x00~0x7fしか存在しない:ASCII (または shift-jis)
|
33
|
+
0x81など、0x00~0x7f以外の値が含まれる:shift-jis、utf-8など
|
34
|
+
※shift-jisの場合は、日本語を2バイトで表す場合の1バイト目など
|
35
|
+
詳細は文字コード表を参考にするとよいかと思います。
|
36
|
+
|
37
|
+
参考:
|
38
|
+
UCS-2 および UCS-2 とユニコードの関係 https://www.ibm.com/support/knowledgecenter/ja/ssw_i5_54/nls/rbagsucs2.htm
|
39
|
+
|
40
|
+
Unicode対応 文字コード表 (と解説) http://ash.jp/code/unitbl21.htm
|
1
書式の改善など
answer
CHANGED
@@ -1,16 +1,13 @@
|
|
1
|
-
|
1
|
+
テキストエディタで開いた際、多くの場合、エンコーディングが表示されるので、それを参考にするとよいかと思います。(エンコーディングの扱いに慣れている場合は、バイナリエディタで見た方が原因がはっきり分かりますが・・)
|
2
|
+
※BOM無しの場合は、ファイルの先頭付近に日本語などが含まれていない場合、ASCII、Shift-JIS、Utf-8等の判定材料が無いので、エンコーディングの判定で失敗する場合もあります。
|
2
3
|
|
3
|
-
バイナリエディタで開くと、先頭部分はこんな感じになっているかと思います。
|
4
|
-
|
4
|
+
今回の質問の場合、ファイルを開く`f_in = open(filelistname, 'r')`の段階でエンコードに配慮する必要があるかと思います。
|
5
5
|
|
6
|
-
|
7
|
-
従って、ファイルを開く`f_in = open(filelistname, 'r')`の段階でエンコードに配慮する必要があるかと思います。
|
8
|
-
|
9
6
|
似たようなサンプルが、Stackoverflowなどにありますので、参考にされるとよいかと思います。
|
10
7
|
[Stackoverflow - Character reading from file in Python](https://stackoverflow.com/questions/147741/character-reading-from-file-in-python)
|
11
8
|
[Qiita - pythonでUTF8のテキスト処理](https://qiita.com/kanemu@github/items/1080972679c9cb70ebff)
|
12
9
|
|
13
|
-
例:
|
10
|
+
例: utf-8の場合
|
14
11
|
`f_in = codecs.open(filelistname, 'r', encoding='utf-8')`
|
15
12
|
(modeのデフォルトは'r'ですが、説明のために足しておきました)
|
16
13
|
|