回答編集履歴

1

修正

2020/04/25 09:16

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -1,3 +1,7 @@
1
+ ## エラーの原因
2
+
3
+
4
+
1
5
  ```python
2
6
 
3
7
 
@@ -19,3 +23,41 @@
19
23
  `finally` は `try` 内で例外が発生しても、しなくても呼ばれます。
20
24
 
21
25
  `result.decode('cp932')` で例外が発生すると、`henkan = result.decode('cp932')` で `henkan` が定義される前に `finally` 内に移行するため、`henkan` が定義されていないとエラーになります。
26
+
27
+
28
+
29
+ ## 質問の内容について
30
+
31
+
32
+
33
+ Python では、デコードした際にエラーが起こるような状況 (ようは文字化け) では例外が発生します。それを無視して、無理やりデコードするには、`errors="ignore"` 引数を `decode()` に追加する必要があります。
34
+
35
+
36
+
37
+ ```python
38
+
39
+ text = "テスト"
40
+
41
+
42
+
43
+ s = text.encode("utf-8")
44
+
45
+ s = s.decode("cp932", errors="ignore")
46
+
47
+ print(s) # 繝繧ケ繝
48
+
49
+ ```
50
+
51
+
52
+
53
+ なので、たぶん以下のようにすれば意図通りに動くと思います。
54
+
55
+
56
+
57
+ ```diff
58
+
59
+ - result.decode('cp932')
60
+
61
+ + result.decode('cp932', errors="ignore")
62
+
63
+ ```