回答編集履歴

4

Windowsと合わない説明を修正

2017/01/05 08:07

投稿

ikedas
ikedas

スコア4335

test CHANGED
@@ -1,24 +1,31 @@
1
- Pythonを起動する前に[PYTHONIOENCODING](http://docs.python.jp/3/using/cmdline.html#envvar-PYTHONIOENCODING)環境変数設定します。
1
+ (Windowsと合わない説明修正しました)
2
2
 
3
+ コマンドプロンプトで端末の文字コードをUTF-8にするには、次のようにします。
4
+
3
- ```bash
5
+ ```
6
+ > chcp 65001
7
+ ```
8
+
9
+ Pythonの入出力の文字コードを変えるには、Pythonを起動する前に[PYTHONIOENCODING](http://docs.python.jp/3/using/cmdline.html#envvar-PYTHONIOENCODING)環境変数を設定します。
10
+
11
+ ```
4
- $ PYTHONIOENCODING=cp932
12
+ > PYTHONIOENCODING=utf-8
5
- $ export PYTHONIOENCODING
6
- $ python ...
13
+ > python ...
7
14
  ...
8
15
  ```
9
16
 
10
- ただこれだと標準入出力の全部 (`sys.stdin.encoding`、`sys.stdout.encoding`、`sys.stderr.encoding`) が変わってしいます。どれか一つだけ (たとえば`sys.stdout.encoding`だけ) 変える場合は、
17
+ ちなみに上記の方法だと標準入出力の全部 (`sys.stdin.encoding`、`sys.stdout.encoding`、`sys.stderr.encoding`) が変わます。どれか一つだけ (たとえば`sys.stdout.encoding`だけ) 変える場合は、
11
18
 
12
19
  ```python
13
20
  import codecs
14
21
  import sys
15
22
 
16
23
  # Python 2.x
17
- sys.stdout = codecs.getwriter("cp932")(sys.stdout)
24
+ sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
18
25
  print u'あい' # bytes型ではだめ
19
26
 
20
27
  # Python 3.x
21
- sys.stdout = codecs.getwriter("cp932")(sys.stdout.detach())
28
+ sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
22
29
  print('あい')
23
30
  ```
24
31
 

3

微修正

2017/01/05 08:07

投稿

ikedas
ikedas

スコア4335

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  Python 3では、文字列に特定の文字コードが指定されることはありません。Python内部では、文字データはすべてユニコードで扱われます。
28
28
 
29
- 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの外では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
29
+ 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの**部**では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
30
30
 
31
31
  `sys.stdout.encoding`を変えるということは、`print()`で文字を出力するときにどの文字コードのバイトデータにするかを変える、ということです。出力先の端末 (画面) で想定している文字コードと違えば、正しく表示されません。例えば、端末の文字コードがUTF-8のときに`sys.stdout.encoding`をCP932にすれば、表示されるものは文字化けします。
32
32
 

2

追記 文字コード

2017/01/05 07:36

投稿

ikedas
ikedas

スコア4335

test CHANGED
@@ -22,3 +22,11 @@
22
22
  print('あい')
23
23
  ```
24
24
 
25
+ (追記)
26
+
27
+ Python 3では、文字列に特定の文字コードが指定されることはありません。Python内部では、文字データはすべてユニコードで扱われます。
28
+
29
+ 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの外では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
30
+
31
+ `sys.stdout.encoding`を変えるということは、`print()`で文字を出力するときにどの文字コードのバイトデータにするかを変える、ということです。出力先の端末 (画面) で想定している文字コードと違えば、正しく表示されません。例えば、端末の文字コードがUTF-8のときに`sys.stdout.encoding`をCP932にすれば、表示されるものは文字化けします。
32
+

1

typos\.

2017/01/05 07:35

投稿

ikedas
ikedas

スコア4335

test CHANGED
@@ -14,11 +14,11 @@
14
14
  import sys
15
15
 
16
16
  # Python 2.x
17
- sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
17
+ sys.stdout = codecs.getwriter("cp932")(sys.stdout)
18
18
  print u'あい' # bytes型ではだめ
19
19
 
20
20
  # Python 3.x
21
- sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
21
+ sys.stdout = codecs.getwriter("cp932")(sys.stdout.detach())
22
22
  print('あい')
23
23
  ```
24
24