回答編集履歴

1

修正

2020/04/05 06:24

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -43,3 +43,67 @@
43
43
  print(json_bin)
44
44
 
45
45
  ```
46
+
47
+
48
+
49
+ ## 追記
50
+
51
+
52
+
53
+ Python 2系と3系で文字列の扱いは大きく異るので、WEb 上の情報を参照する際はどのバージョンの話なのかをご注意ください。
54
+
55
+
56
+
57
+ [Python2とPython3のstr型/unicode型/bytes型/encode/decodeの違い解説 - Qiita](https://qiita.com/miyagi1024/items/0e8cc40d95bf6236729e)
58
+
59
+
60
+
61
+ Python 3では文字列は内部的に unicode で管理されている str 型で表されます。
62
+
63
+ この str をテキストにする際には、ascii や utf-8 といったエンコード方式でバイナリ化します。
64
+
65
+ open() でモードを "w" にしてエンコード方式を指定して書き込むのと、
66
+
67
+ str.encode() でバイナリにしてから、モードを "wb" にしてバイナリとして書き込むのは同じ意味です。
68
+
69
+
70
+
71
+ ```python
72
+
73
+ text = "ハローワールド"
74
+
75
+
76
+
77
+ with open("sample.txt", "w", encoding="utf-8") as f:
78
+
79
+ f.write(text)
80
+
81
+
82
+
83
+ with open("sample2.txt", "wb") as f:
84
+
85
+ f.write(text.encode("utf-8"))
86
+
87
+ ```
88
+
89
+
90
+
91
+ > jsonは、文字なのでasciiなので、シンプルにバイナリ(byte型に変換できる)
92
+
93
+
94
+
95
+ json は ascii 以外の文字 (日本語とか) も含められるので、その場合、"utf-8" とかその文字を含む文字コードを使う必要があります。
96
+
97
+ どの文字コードでエンコードするかは利用者が決めることなので、bytes オブジェクトにしたい場合は str.encode() で明示的に変換する必要があります。
98
+
99
+
100
+
101
+ > バイナリって人間が読めない形式だと思っていましたが、outputは普通に読める形式でしたが。。
102
+
103
+
104
+
105
+ テキストもバイナリです。
106
+
107
+ テキストエディタで開いたときに文字として表示されるのは、テキストエディタが文字コードを判断して、バイナリを解釈しているからです。
108
+
109
+ 間違った文字コードで解釈すると、正しく文字として認識できず、文字化けが発生します。