回答編集履歴
1
修正
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
|
+
間違った文字コードで解釈すると、正しく文字として認識できず、文字化けが発生します。
|