質問するログイン新規登録

回答編集履歴

2

情報を追加

2017/11/29 18:15

投稿

toris-birds
toris-birds

スコア122

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

書式の改善など

2017/11/29 18:15

投稿

toris-birds
toris-birds

スコア122

answer CHANGED
@@ -1,16 +1,13 @@
1
- 質問にテキストファイルのエンコーディングの情報やテキストのサンプル書かれていないので、エラーに表示された内容から推測すがBom無しのutf8で書かたファイルかと思います。
1
+ テキストエディタで開いた際、多く場合、エンコーディングが表示されので、を参考にするとよいかと思います。(エンコーディングの扱いに慣れている場合は、バイナリエディタで見た方が原因がはっきり分かりますが・・)
2
+ ※BOM無しの場合は、ファイルの先頭付近に日本語などが含まれていない場合、ASCII、Shift-JIS、Utf-8等の判定材料が無いので、エンコーディングの判定で失敗する場合もあります。
2
3
 
3
- バイナリエディタで開くと、先頭部分はこんな感じになっているかと思います。
4
- ![ファイルイメージ](1f8edb9b273d1c3d3cc098dec7b134ce.png)
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