質問するログイン新規登録

回答編集履歴

2

誤字修正

2016/03/20 06:35

投稿

raccy
raccy

スコア21784

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で書かれた大きなファイルをShift_JISに変換すると言ったことをしたい場合、一度Stringに変換するのは大きくメモリを消費するため上の方法は使えません。CharBufferを経由して、Charset.decodeしたのを逐一Charset.encodeで変換すると言ったことが必要になります。
63
+ なお、UTF-8で書かれた大きなファイルをShift_JISに変換すると言ったことをしたい場合、一度Stringに変換するのは大きくメモリを消費するため上の方法は使えません。CharBufferを経由して、Charset.decodeしたのを逐一Charset.encodeで変換すると言ったことが必要になります。

1

文章を補強

2016/03/20 06:35

投稿

raccy
raccy

スコア21784

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