Javaの 'char'は2バイトです。 (hereから確認することができます。)Javaはどのように3バイトのUnicode文字をchar型に適合させますか?
私は、このサンプルコードがあります。
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
を、次のように出力されている:
3
€
私の質問は、Javaが3バイトに合わせたのか、です文字をcharデータ型に変換しますか?最終的なファイル「バズを
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
:私は少しさらに、コードを編集して、次のステートメントを追加する場合もの-Dfile.encoding = UTF-8
:ところで、私は、パラメータを使用してアプリケーションを実行しています.txt "は2バイトのみで、UTF-8ファイルとして扱っても正しい文字は表示されません。
編集2: エンコーディングUTF-16 BEでファイル "baz.txt"を開くと、文字コードがテキストエディタで正しく表示されますが、これはわかります。
Javaは内部的にUTF-16を使用します。 http://stackoverflow.com/questions/9699071/what-is-the-javas-internal-represention-for-string-modified-utf-8-utf-16 –
文字は文字ではありません。 Javaの最大の問題の1つです。すべての仕組みについては、utf8everywhere.orgを参照してください。 –