回答編集履歴
1
InputStream と Reader の違いの説明を追加
test
CHANGED
@@ -47,3 +47,29 @@
|
|
47
47
|
}
|
48
48
|
|
49
49
|
```
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
**追記**
|
54
|
+
|
55
|
+
「安」という漢字の文字コードは次のようになります。
|
56
|
+
|
57
|
+
Shit-JIS: 88 c0 (ファイル上のコード)
|
58
|
+
|
59
|
+
UTF-8: e5 ae 89 (ファイル上のコード)
|
60
|
+
|
61
|
+
Unicode: 5b89 (Java の char の内部コード)
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
InputStream の read() は 1バイトずつ読み込むので、それを 2バイトの char に
|
66
|
+
|
67
|
+
キャストすると、0088 00c0 または 00e5 00ae 0089 という文字列になります。
|
68
|
+
|
69
|
+
だから文字化けします。
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
Reader の read() は複数バイトを読み込んで 5b89 という 1文字に変換します。
|
74
|
+
|
75
|
+
だから文字化けしません。
|