57704
Webサーバーの、CGIで以下のコードを実行するとエンコーディングのエラーになります。

```

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    html_body = """
    <!DOCTYOE html>
    <html lang="ja">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title> Test CAM</title>
    </head>
    <body>
    こんにちは<br>
    <form>
    <input type="button" value="Button" onclick="button_click()">
    </form>
    </body>
    </html>
    """
    print("Content-type: text/html\n")
    print(html_body)
    
```

エラー内容は

```

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 153-157:
    
```

ただし、ファイルは

```

    $ nkf -guess test.py
    UTF-8
    
```

なので、utf-8のはずです

どうも、リダイレクトの折にエラーになるようで

```

    import sys
    sys.setdefaultencoding('utf-8')
    
```

を入れて見ましたが、今度は

```

    AttributeError: module 'sys' has no attribute 'setdefaultencoding'
    
```

とのエラーになります。

Python3ではどのように対処すれば良いでしょうか？
CC BY-SA 4.0
2019-08-30T00:07:16.503
57703
2019-08-30T01:47:42.083
2019-08-30T01:47:42.083
29826
15090
question
python python3 cgi
CGIとして動作させた場合のUnicodeEncodeError
Windows10のpython3.6ですが、`python -m http.server
--cgi`を[実行](https://qiita.com/goodboy_max/items/833d482827bf0efab45a)した場合は文字化けしました。

文字列がShift-
JISで送られていましたので、[リンク先](https://imarismile.com/2018/08/09/post-7910/)のように[`io.TextIOWrapper`](https://docs.python.org/ja/3/library/io.html#io.TextIOWrapper)を冒頭に記述することで対処出来ました。

OSが違うので直接の回答になるかは分かりませんが、ご参考になれば。

変更前:

```

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
```

変更後:

```

    # -*- coding: utf-8 -*-
    import sys
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    
```
CC BY-SA 4.0
2019-08-30T01:25:54.517
57704
2019-08-30T01:25:54.517
9820
57703
answer