【Java】CJK統合漢字の一覧を出力するプログラム
ちょっとある目的のためにCJK統合漢字の一覧がほしくなったので自作した簡単なJavaプログラム。
実行すると「all_cjk_kanji.txt」という名前のUTF-8のテキストファイルを同階層に出力する。
import java.io.*; import java.util.*; import java.text.*;public class AllCJKKanjiOutputTest {
private static final File OUTPUT_TEXT_FILE = new File("all_cjk_kanji.txt"); private static final String ENCODING_UTF8 = "UTF-8"; private static final char START_CHAR = 0x4e00; private static final char END_CHAR = 0x9fcf; private static final int FLUSH_POINT = 100; private static final DateFormat LOG_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); public static void main(String[] args) { try { execMain(); } catch(Throwable e){ e.printStackTrace(); } } private static void execMain() throws Throwable { BufferedWriter bw = null; try { printLog("START"); bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(OUTPUT_TEXT_FILE),ENCODING_UTF8)); char wkChar = START_CHAR; StringBuilder sb = new StringBuilder(); int wkRound = 0; while (wkChar <= END_CHAR) { sb.append(new String(new char[] {wkChar})); wkRound++; wkChar++; if (wkRound % FLUSH_POINT == 0) { StringBuilder hani = new StringBuilder(); String haniStart = Integer.toHexString(wkChar - FLUSH_POINT); String haniEnd = Integer.toHexString(wkChar - 1); hani.append(haniStart); hani.append(" - "); hani.append(haniEnd); hani.append(" "); bw.write(hani.toString()); bw.write(sb.toString()); bw.newLine(); bw.flush(); sb = new StringBuilder(); printLog(" Round [" + wkRound + "] write..."); }
// if (wkRound > 1000) {
// break;
// }} bw.write(sb.toString()); bw.newLine(); bw.flush(); } catch(Throwable e) { throw e; } finally { if (bw != null) { bw.close(); } } printLog("END"); } private static void printLog(Object msg) { StringBuilder sb = new StringBuilder(); sb.append(LOG_FORMAT.format(new Date())); sb.append(" "); if (msg != null){ sb.append(msg.toString()); } System.out.println(sb.toString()); }
}
1行に漢字100文字を出力して次の行に行く。
行頭にその行に出力されている文字コードの範囲をUnicodeで記載。
例えば「4e00 - 4e63」ならU+4E00~U+4E63の文字がその行にずらーっと並んでいる。
ちなみにサロゲートペアは入ってない。
全部で20,943字。
作成されるファイルは改行コード含んでもせいぜい61KB程度とそこまで重くない。
開くと結構圧巻である。
終盤にいくほど構造が複雑になってきており、一見するとつぶれて見えない文字もチラホラと。
その辺見るとAA見てるみたいな気分になってきて頭が痛くなる。