回答編集履歴
1
修正
answer
CHANGED
@@ -20,4 +20,36 @@
|
|
20
20
|
json_bin = f.read()
|
21
21
|
|
22
22
|
print(json_bin)
|
23
|
-
```
|
23
|
+
```
|
24
|
+
|
25
|
+
## 追記
|
26
|
+
|
27
|
+
Python 2系と3系で文字列の扱いは大きく異るので、WEb 上の情報を参照する際はどのバージョンの話なのかをご注意ください。
|
28
|
+
|
29
|
+
[Python2とPython3のstr型/unicode型/bytes型/encode/decodeの違い解説 - Qiita](https://qiita.com/miyagi1024/items/0e8cc40d95bf6236729e)
|
30
|
+
|
31
|
+
Python 3では文字列は内部的に unicode で管理されている str 型で表されます。
|
32
|
+
この str をテキストにする際には、ascii や utf-8 といったエンコード方式でバイナリ化します。
|
33
|
+
open() でモードを "w" にしてエンコード方式を指定して書き込むのと、
|
34
|
+
str.encode() でバイナリにしてから、モードを "wb" にしてバイナリとして書き込むのは同じ意味です。
|
35
|
+
|
36
|
+
```python
|
37
|
+
text = "ハローワールド"
|
38
|
+
|
39
|
+
with open("sample.txt", "w", encoding="utf-8") as f:
|
40
|
+
f.write(text)
|
41
|
+
|
42
|
+
with open("sample2.txt", "wb") as f:
|
43
|
+
f.write(text.encode("utf-8"))
|
44
|
+
```
|
45
|
+
|
46
|
+
> jsonは、文字なのでasciiなので、シンプルにバイナリ(byte型に変換できる)
|
47
|
+
|
48
|
+
json は ascii 以外の文字 (日本語とか) も含められるので、その場合、"utf-8" とかその文字を含む文字コードを使う必要があります。
|
49
|
+
どの文字コードでエンコードするかは利用者が決めることなので、bytes オブジェクトにしたい場合は str.encode() で明示的に変換する必要があります。
|
50
|
+
|
51
|
+
> バイナリって人間が読めない形式だと思っていましたが、outputは普通に読める形式でしたが。。
|
52
|
+
|
53
|
+
テキストもバイナリです。
|
54
|
+
テキストエディタで開いたときに文字として表示されるのは、テキストエディタが文字コードを判断して、バイナリを解釈しているからです。
|
55
|
+
間違った文字コードで解釈すると、正しく文字として認識できず、文字化けが発生します。
|