|
Top > Java Javaの文字コード
|
|||||||||||||||||||||||||||||||||||||||||||||||||
| JDKのバージョン | Unicodeのバージョン |
| JDK 1.1以前 | 1.1.5 |
| JDK 1.1 | 2.0 |
| JDK 1.1.7 | 2.1 |
| J2SE 1.4 | 3.0 |
| J2SE 5.0 | 4.0 |
となっている。
Javaで採用されているUnicode 2.1では、約4万字程度の文字が割り当てられています※1。
と書いてあるが、Unicode 3.1以降でははるかに多くなっている。
参照:http://ja.wikipedia.org/wiki/Unicode
JDK 1.5でサポートされているエンコーディング
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/encoding.doc.html
Windows上で
System.out.println("ABCこんにちは、世界!ABC\n");
と書いてShift_JISで保存し、javaでコンパイルする。
そしてクラスファイルをバイナリエディタで開いてみると次のような部分がある。
0000090: 1901 0022 4142 43e3 8193 e382 93e3 81ab ..."ABC......... 00000a0: e381 a1e3 81af e380 81e4 b896 e795 8cef ................ 00000b0: bc81 4142 430a 0700 1a0c 001b 001c 0100 ..ABC...........
""の文字列の部分がUTF-8になっていることがわかる。
システムのデフォルトエンコーディングと異なるエンコーディングで書いたソースをコンパイルするには
javac -encodng Shift_JIS
のように-encodingオプションを指定する。
すると""の文字列の部分が、ソースファイルのエンコーディングからシステムのデフォルトエンコーディニグに変換されてクラスファイルになる。
ToStringBuilderが超便利。
loggingの使い方
http://www.atmarkit.co.jp/fjava/rensai2/jakarta09/jakarta09.html
copyPropertiesでBeanのプロパティをコピー。便利。
http://www.techscore.com/tech/ApacheJakarta/Struts/16-3.html
http://www.thinkit.co.jp/free/article/0606/13/7/
Hibernate, Torque, iBATIS の比較がよい。
第1回 O/Rマッピングとは?
第2回 SQLを直接記述できるiBATIS(前編)
第3回 SQLを直接記述できるiBATIS(後編)
第4回 SQLを記述しない「Torque」
第5回 多機能なHibernate(前編)
第6回 多機能なHibernate(後編)
第7回 それぞれのメリット/デメリット
| 自ファイル | 他ファイル | ||||
| 修飾子 | 自クラス | サブクラス | 他クラス | サブクラス | 他クラス |
| public | ○ | ○ | ○ | ○ | ○ |
| protected | ○ | ○ | ○ | ○ | × |
| なし | ○ | ○ | ○ | × | × |
| private | ○ | × | × | × | × |
http://www.tohoho-web.com/java/modifier.htm#access
新予約語:enum
JDK 1.3や1.4で作成されたアプリケーションをJDK 5.0でリコンパイルする場合は注意!
正規表現でUnicodeブロックを使うと文字の種別を調べることができる。
// 文字列が、漢字だけからなるかどうかを調べるプログラム
import java.io.*;
import java.util.regex.*;
public class Match {
public static void main(String[] args) {
String regex = "\\p{InCJKUnifiedIdeographs}+";
String texts[] = {
"漢字変換します",
"漢字変換",
"あいうえお"
};
Pattern p = Pattern.compile(regex);
for (int i=0; i<texts.length; i++) {
Matcher m = p.matcher(texts[i]);
if (m.matches()) {
System.out.println("Match :" + texts[i]);
} else {
System.out.println("Not match :" + texts[i]);
}
}
}
}
ASCII文字だけであるか判定するには、
String regex = "\\p{ASCII}+";
と変更すればよい。
参考:
MODULE.JP - 日本語に絡むUnicodeブロックとスクリプト(正規表現)
http://module.jp/blog/regex_unicode_prop.html
csv-lib
http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi?page=Libs%26Tools
Excelと同じく、値の中にカンマが含まれている場合は""で囲む形式に対応している。
abc," d, e, f",""hij""
↓
[0,0] abc [0,1] d, e, f [0,2] "hij"
String str = new File(".").getAbsoluteFile().getParentFile().getAbsolutePath();
または
String str = System.getProperty("user.dir");
すべてのプロパティを画面に表示
System.getProperties().list(System.out);
その他のシステムプロパティ
http://www.hcn.zaq.ne.jp/no-ji/javamemo/java_util_Properties.html
System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("user.dir"));
System.getProperties().list(System.out);
-- listing properties -- java.specification.name=Java Platform API Specification awt.toolkit=sun.awt.windows.WToolkit java.version=1.2 java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment user.timezone=Asia/Tokyo java.specification.version=1.2 java.vm.vendor=Sun Microsystems Inc. user.home=C:\WIN95 java.vm.specification.version=1.0 os.arch=x86 java.awt.fonts= java.vendor.url=http://java.sun.com/ user.region=JP file.encoding.pkg=sun.io java.home=D:\JAVA\JDK1.2\JRE java.class.path=.;d:\java\jdk1.2\bin; line.separator= java.ext.dirs=D:\JAVA\JDK1.2\JRE\lib\ext java.io.tmpdir=C:\WIN95\TEMP\ os.name=Windows 95 java.vendor=Sun Microsystems Inc. java.awt.printerjob=sun.awt.windows.WPrinterJob java.library.path=D:\JAVA\JDK1.2\BIN;.;C:\WIN95\SYSTEM;... java.vm.specification.vendor=Sun Microsystems Inc. sun.io.unicode.encoding=UnicodeLittle file.encoding=MS932 java.specification.vendor=Sun Microsystems Inc. user.language=ja user.name=no-ji java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport... java.vm.name=Classic VM java.class.version=46.0 java.vm.specification.name=Java Virtual Machine Specification sun.boot.library.path=D:\JAVA\JDK1.2\JRE\bin os.version=4.0 java.vm.version=1.2 java.vm.info=build JDK-1.2-V, native threads, symcjit java.compiler=symcjit path.separator=; file.separator=\ user.dir=E:\USERS\java\test sun.boot.class.path=D:\JAVA\JDK1.2\JRE\lib\rt.jar;D:\JAVA...
Properties prop = new Properties();
InputStream in = null;
try {
in = FileInputStream("foo.properties");
prop.load(in);
}
catch (FileNotFoundException ex) { ex.printStackTrace(); }
catch (IOException ex) { ex.printStackTrace(); }
finally { if (in!=null) in.close(); }
Properties prop = new Properties();
OutputStream out = null;
try {
out = new FileOutputStream("foo.properties");
prop.store(out, "Title");
}
catch (FileNotFoundException ex) { ex.printStackTrace(); }
catch (IOException ex) { ex.printStackTrace(); }
finally { if (out!=null) out.close(); }
System.out.println("UserID="+System.getProperty("UserID"));
java -DUserID=Watanabe TestSystemProperties
javac -J-version
java -version
java のバージョンとクラスファイルのバージョン番号との対応は以下の通り。
1.1 = 45.3 1.2 = 46.0 1.3 = 47.0 1.4 = 48.0 1.5 = 49.0
クラスファイルのバージョンを調べるには、Unix では file コマンドを使うとよい。
$ file xxx.class xxx.class: compiled Java class data, version 48.0
file コマンドが使えない場合は、class ファイルの先頭 8 バイトを見れば分かる。
class ファイルの 先頭 4 バイトは「CA FE BA BE」で固定である。続く、5 ~ 6 バイトがマイナーバージョン、7 ~ 8 バイトがメジャーバージョンを表している。
ある class ファイルの先頭が以下だった場合、
CA FE BA BE 00 00 00 30
0x30 = 48 だから、JDK1.4 に準拠してコンパイルされた事が分かる。
/**
* <code>e</code>のスタックトレースを文字列として取得します。
*
* @param e 例外およびエラー
* @return <code>e</code>のスタックトレース文字列
*/
public String getStackTraceString(Throwable e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
pw.flush();
String ret = sw.getBuffer().toString();
pw.close();
return ret;
}