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

回答編集履歴

2

補足を追加

2021/02/26 12:21

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,4 +1,4 @@
1
- Windowsでリダイレクトを使うと、標準出力のエンコードの既定値がcp932になります。今回得られるテキスト中に著作権マーク© (U+00A9)が含まれており、cp932では表現できない文字なので、リダイレクトしたときにだけエラーが表示されます。
1
+ Windowsでリダイレクトを使うと、Pythonの標準出力のエンコードの既定値がcp932になります。今回得られるテキスト中に著作権マーク© (U+00A9)が含まれており、cp932では表現できない文字なので、リダイレクトしたときにだけエラーが表示されます。
2
2
 
3
3
  対策としては、標準出力のエンコードをutf-8に変更してください。
4
4
 
@@ -9,4 +9,11 @@
9
9
  この後でprintしたものをリダイレクトすれば、utf-8でエンコードされたファイルが作成されます。
10
10
 
11
11
  補足: 書いた後で見つかる同じ内容の質問。
12
- [Python - Pythonでエンコードのエラーです。|teratail](https://teratail.com/questions/268749)
12
+ [Python - Pythonでエンコードのエラーです。|teratail](https://teratail.com/questions/268749)
13
+
14
+ さらに補足: Python 3.7以降で使える`-X utf8`オプションを使うと、標準出力のエンコードの既定値がutf-8になるので、上記のコードが不要になります。環境変数`PYTHONUTF8`に1を設定しても、同じ効果が得られます。
15
+
16
+ ```Diff
17
+ -C:¥Users>python requests_header_encoding.py https://yahoo.co.jp/dp > dp.html
18
+ +C:¥Users>python -X utf8 requests_header_encoding.py https://yahoo.co.jp/dp > dp.html
19
+ ```

1

補足を追加

2021/02/26 12:21

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -6,4 +6,7 @@
6
6
  sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
7
7
  ```
8
8
 
9
- この後でprintしたものをリダイレクトすれば、utf-8でエンコードされたファイルが作成されます。
9
+ この後でprintしたものをリダイレクトすれば、utf-8でエンコードされたファイルが作成されます。
10
+
11
+ 補足: 書いた後で見つかる同じ内容の質問。
12
+ [Python - Pythonでエンコードのエラーです。|teratail](https://teratail.com/questions/268749)