Python - 日本語出力は大変


クラウディア 


1. 概要
2. 日本語を出力する

1. 概要

 本ページは、現在(2025年5月29日)の状況では解消しています。  正に、「たったこれだけ」という。

print('たったこれだけ')
 てなソースを書けば、もちろん。

たったこれだけ
 と出力されるのでありますが・・・。  これを、例えば、ウェブサーバ上に配置して、ブラウザ越しに実行しようとすると・・・。

Traceback (most recent call last):
  File "/home/hogehoge/lang/python/stdio/del01.py", line 1, in 
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)
 てなことになるのである。  これは、上で実行した環境は、標準出力を「UTF-8」に設定しているので、表示できるのですが。  ブラウザ越しだと、デフォルトで標準出力が「ascii」になっているためらしい。  で、対策を探すと、あちこちに用意されている・・・つまり、多くの人が苦労しているわけなのです。  ところが、その多くは、「Python2」系列のものだったりして、真似するとほぼ、エラーになるのです。  現在(2019年12月27日)のわたしの使用している環境は。

Python 3.6.9
 で、ありまして、これが変わると以下の記事も変わるかもしれないのですが・・・。  多数ある中で、やっと解決できたのが「sys.stdout のエンコードを変更する in Python3.0 - @kei10in の日記」の記事のおかげです。

2. 日本語を出力する

 参考サイトに基づいて。

import io
import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

print('たったこれだけ')
 と、1~5行を加えると。

たったこれだけ
 正常に出力されます。  都度都度、エンコーディングを変えるやり方もあるようですが、わたしは、そうそう変えないので、トップに記述するだけでじゅうぶんです。  ちなみにこれは、出力先が、「UTF-8」の場合で書いていますが、文字コードが違う場合はコードの記述を変えれば、応用できるはずです。

earthcar(アースカー)