回答編集履歴
2
誤字修正
answer
CHANGED
@@ -60,4 +60,4 @@
|
|
60
60
|
```
|
61
61
|
Shift_JISと日本語版Windowsのデフォルト文字コードであるWindows-31J(別名MS932、CP932等)は**別のエンコード**です。"①"などの一部の記号(いわゆる機種依存文字と言われていた文字)について異なる動作になりますので注意して下さい。また、"????"(U+20BB7。土に口の「よし」。吉とは異なる漢字です。対応フォントが無い環境では文字化けします)はShift_JISにもWindows-31Jにも含まれないため、正しく変換されません。
|
62
62
|
|
63
|
-
なお、UTF-8で
|
63
|
+
なお、UTF-8で書かれた大きなファイルをShift_JISに変換すると言ったことをしたい場合、一度Stringに変換するのは大きくメモリを消費するため、上の方法は使えません。CharBufferを経由して、Charset.decodeしたのを逐一Charset.encodeで変換すると言ったことが必要になります。
|
1
文章を補強
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
javaのStringは**UTF-16形式**で保存されています。示していただいたコードの`str`はそもそも**UTF-8でもShift_JISありません**。ソースコードがUTF-8であっても、`"あ"`と言ったリテラル文字列はコンパイル時にUTF-16に変換されます。
|
1
|
+
javaのStringは**UTF-16形式**で保存されています。示していただいたコードの`str`はそもそも**UTF-8でもShift_JISでもありません**。ただの壊れたStringになるだけです。ソースコードがUTF-8であっても、`"あ"`と言ったリテラル文字列はコンパイル時にUTF-16に変換されます。
|
2
2
|
|
3
3
|
UTF-8やShift_JISを正しく扱うにはbyte[]ではなければなりません。Stringを介することで変換が可能です。下記コードを参考に、動作を確認して下さい。コードの処理の順番を逆にすれば、逆の変換になります。
|
4
4
|
|