回答編集履歴

4

Windowsと合わない説明を修正

2017/01/05 08:07

投稿

ikedas
ikedas

score3132

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

3

微修正

2017/01/05 08:07

投稿

ikedas
ikedas

score3132

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの外では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
51
+ 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの**部**では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
52
52
 
53
53
 
54
54
 

2

追記 文字コード

2017/01/05 07:36

投稿

ikedas
ikedas

score3132

test CHANGED
@@ -37,3 +37,21 @@
37
37
  print('あい')
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ (追記)
44
+
45
+
46
+
47
+ Python 3では、文字列に特定の文字コードが指定されることはありません。Python内部では、文字データはすべてユニコードで扱われます。
48
+
49
+
50
+
51
+ 文字データを実際にファイルに保存したり通信回線で送ったりするときは、バイトデータに変換してやる必要があります。つまり、Pythonの外では文字はバイト型のデータで表されます。文字とバイトの間の変換ルールを文字コードと言います。文字コードには「UTF-8」や「CP932」などのいろいろな種類があります。
52
+
53
+
54
+
55
+ ``sys.stdout.encoding``を変えるということは、``print()``で文字を出力するときにどの文字コードのバイトデータにするかを変える、ということです。出力先の端末 (画面) で想定している文字コードと違えば、正しく表示されません。例えば、端末の文字コードがUTF-8のときに``sys.stdout.encoding``をCP932にすれば、表示されるものは文字化けします。
56
+
57
+

1

typos\.

2017/01/05 07:35

投稿

ikedas
ikedas

score3132

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  # Python 2.x
26
26
 
27
- sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
27
+ sys.stdout = codecs.getwriter("cp932")(sys.stdout)
28
28
 
29
29
  print u'あい' # bytes型ではだめ
30
30
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  # Python 3.x
34
34
 
35
- sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
35
+ sys.stdout = codecs.getwriter("cp932")(sys.stdout.detach())
36
36
 
37
37
  print('あい')
38
38