サンプル集 |
■VC ■C# ■Java ■BorlandC ■LinuxC ■MS-DOS ■bash ■Excel VBA ■VBScript ■PHP ■HTML ■perl ■iPhone ■Android ■Lua ■other |
Linuxコマンド |
用語集 |
debian メモ |
apache2 メモ |
MySQL メモ |
Oracle メモ |
HOME |
「UTF-8(BOMサイン無し、CR+LF)」(以下:UTF-8)のファイルをバイト単位に読み込んだら、なんだか上手く読み込めなかったのでいろいろ試してみます。
◆環境OS | Windows XP Professional Version 2002 Service Pack 2 |
---|---|
J2SE SDK | 1.6.0_01 |
まずは、普通にファイルを全部読み込んで表示するプログラムを作成します。
fileByteRead.java | ||
|
続いて UTF-8 で、数字、英字、半角カナなどが混在したデータを作成します。
UTF-8.dat | ||
|
ファイルの容量は 72バイトになりました。 文字数は 34 文字です。
このファイルを先ほど作成したプログラムで読み込んでみます。
◆実行結果
>java -cp . fileByteRead UTF-8.dat
file size(byte): 72
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a ef
bd b1 ef bd b2 ef bd b3 ef bd b4 ef bd b5 e3 81
8b e3 81 8d e3 81 8f e3 81 91 e3 81 93 e3 82 b5
e3 82 a4 e3 82 b9 e3 82 bb e3 82 bd e6 9d b1 e8
a5 bf e5 8d 97 e5 8c 97
file size(byte): 72
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a ef
bd b1 ef bd b2 ef bd b3 ef bd b4 ef bd b5 e3 81
8b e3 81 8d e3 81 8f e3 81 91 e3 81 93 e3 82 b5
e3 82 a4 e3 82 b9 e3 82 bb e3 82 bd e6 9d b1 e8
a5 bf e5 8d 97 e5 8c 97
上手く読み込めました。 ファイルのサイズも 72 バイトで正しいです。
同じ内容の SJIS のファイルを作って読み込ませるとどうなるでしょうか。
SJIS.dat | ||
|
ファイルサイズは 48バイトになりました。
◆実行結果
>java -cp . fileByteRead SJIS.dat
file size(byte): 48
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a b1
b2 b3 b4 b5 82 a9 82 ab 82 ad 82 af 82 b1 83 54
83 43 83 58 83 5a 83 5c 93 8c 90 bc 93 ec 96 6b
file size(byte): 48
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a b1
b2 b3 b4 b5 82 a9 82 ab 82 ad 82 af 82 b1 83 54
83 43 83 58 83 5a 83 5c 93 8c 90 bc 93 ec 96 6b
数字、半角英字は同じバイト数の模様です。 半角カナから先が UTF-8 だと 3 バイトで保存されているようです。
バイト数も 半角英数 15文字 + ( 半角カナ+全角 19文字 * 3 ) = 72 でぴったりです。
SJIS では、半角カナは 1 バイトで、全角文字が 2 バイトで保存されているようです。
バイト数は、半角英数+半角カナ 20文字 + ( 全角 14文字 * 2 ) = 48 でこちらもぴったりです。
UTF-8 を SJIS に変換
byte 配列を元に String オブジェクトを作成する際に、Charset を指定すると文字コードを変換してくれます。 UTF-8 で読み込み SJIS へ変換して表示するようにプログラムを修正します。
fileByteReadtoSJIS.java | ||
|
String を文字コード UTF-8 で生成し、byte 配列を作るときに SJIS に変換するように指定しました。
◆実行結果
>java -cp . fileByteReadtoSJIS UTF-8.dat
file size(byte): 72
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a b1
b2 b3 b4 b5 82 a9 82 ab 82 ad 82 af 82 b1 83 54
83 43 83 58 83 5a 83 5c 93 8c 90 bc 93 ec 96 6b
file size(byte): 72
31 32 33 34 35 41 42 43 44 45 66 67 68 69 6a b1
b2 b3 b4 b5 82 a9 82 ab 82 ad 82 af 82 b1 83 54
83 43 83 58 83 5a 83 5c 93 8c 90 bc 93 ec 96 6b
読み込みファイルサイズは 72 バイトですが、表示されているは SJIS のコードが表示されています。
Copyright (C) 2012 ymlib.com