空があんなに高い
歌って踊れるプログラマーを目指して

プロフィール
どんぱん
Author: どんぱん

最近の記事とコメント
トラックバックリスト
カテゴリ
ユーザータグ
過去ログ
メールフォーム

はじめてのUnicode

Unicodeを経由して漢字を変換(とりあえず日本と中国の漢字)するにはどうすんだろと思い、総本山をたずねてみた。
Unicode Home Page
http://www.unicode.org/

漢字のデータはUnihan.txtという1個のテキストファイルにまとまっている。現在のバージョンはUnicode 5.1.0だった。ちなみにhanは「漢」のピンインだ。
http://www.unicode.org/Public/UNIDATA/Unihan.zip
この中にある1ファイルが29MBもある。文字のいろいろな意味づけをタグをつけて分類し、1つの文字に対して、1行1タグで数十タグも記述してあるので、やけにでかいのだ。この大きさだと扱うのが大変な(notepadが固まってしまうw)ので、タグ別にファイルを分割してみる。
#include <stdio.h>
#include <string.h>
 
int main(void)
{
	FILE *fp;
	char buf[4096];
	char *p, *code, *tag, *desc;
	char fname[256];
 
	while (fgets(buf, sizeof(buf), stdin) != NULL) {
		if (strncmp(buf, "U+", 2) != 0)
			continue;
		p = buf + 2;
		code = p;
		if ((p = strchr(p, '\t')) == NULL)
			continue;
		*p++ = '\0';
		tag = p;
		if ((p = strchr(p, '\t')) == NULL)
			continue;
		*p++ = '\0';
		desc = p;
		if ((p = strchr(p, '\n')) == NULL)
			continue;
		*p = '\0';
		sprintf(fname, "%s.txt", tag);
		if ((fp = fopen(fname, "a")) != NULL) {
			fprintf(fp, "%s\t%s\n", code, desc);
			fclose(fp);
		} else
			perror(fname);
	}
	return 0;
}

このインチキプログラムで、数十分もかかってやっと処理が終わり、タグごとにたくさんのファイルが出来上がった。タグはそれぞれに役割があるので、そこから必要なものを利用する。
      223 kAccountingNumeric.txt
  143,693 kBigFive.txt
  327,587 kCangjie.txt
  258,057 kCantonese.txt
  256,074 kCCCII.txt
   19,572 kCheungBauer.txt
   12,073 kCheungBauerIndex.txt
  201,206 kCihaiT.txt
  224,354 kCNS1986.txt
  224,354 kCNS1992.txt
   13,614 kCompatibilityVariant.txt
   54,305 kCowles.txt
  240,390 kDaeJaweon.txt
  862,596 kDefinition.txt
  172,172 kEACC.txt
   55,235 kFenn.txt
   82,600 kFennIndex.txt
  208,029 kFourCornerCode.txt
   40,712 kFrequency.txt
   74,393 kGB0.txt
   75,526 kGB1.txt
   53,196 kGB3.txt
   31,262 kGB5.txt
      462 kGB7.txt
    8,635 kGB8.txt
   21,056 kGradeLevel.txt
   89,519 kGSR.txt
   78,514 kHangul.txt
  924,805 kHanYu.txt
   64,840 kHanyuPinlu.txt
    5,600 kHDZRadBreak.txt
   53,081 kHKGlyph.txt
   51,325 kHKSCS.txt
    3,960 kIBMJapan.txt
   98,162 kIICore.txt
  648,691 kIRG_GSource.txt
   51,314 kIRG_HSource.txt
  178,203 kIRG_JSource.txt
  367,647 kIRG_KPSource.txt
  229,759 kIRG_KSource.txt
  745,570 kIRG_TSource.txt
      547 kIRG_USource.txt
  125,106 kIRG_VSource.txt
  240,360 kIRGDaeJaweon.txt
  214,747 kIRGDaiKanwaZiten.txt
  921,922 kIRGHanyuDaZidian.txt
1,095,801 kIRGKangXi.txt
  186,788 kJapaneseKun.txt
  178,345 kJapaneseOn.txt
   69,916 kJis0.txt
   52,031 kJIS0213.txt
   63,811 kJis1.txt
  314,070 kKangXi.txt
   25,143 kKarlgren.txt
   94,850 kKorean.txt
   51,183 kKPS0.txt
  218,070 kKPS1.txt
   53,768 kKSC0.txt
   31,416 kKSC1.txt
   40,395 kLau.txt
   77,935 kMainlandTelegraph.txt
  325,448 kMandarin.txt
   97,707 kMatthews.txt
   84,899 kMeyerWempe.txt
  254,827 kMorohashi.txt
   60,931 kNelson.txt
      263 kOtherNumeric.txt
  126,072 kPhonetic.txt
      174 kPrimaryNumeric.txt
    1,683 kPseudoGB1.txt
  343,541 kRSAdobe_Japan1_6.txt
    2,364 kRSJapanese.txt
  802,889 kRSKangXi.txt
    1,868 kRSKanWa.txt
      230 kRSKorean.txt
  894,798 kRSUnicode.txt
  299,014 kSBGY.txt
   96,018 kSemanticVariant.txt
   34,828 kSimplifiedVariant.txt
   10,237 kSpecializedSemanticVariant.txt
   99,451 kTaiwanTelegraph.txt
   51,474 kTang.txt
  245,687 kTotalStrokes.txt
   34,328 kTraditionalVariant.txt
  104,251 kVietnamese.txt
  136,458 kXerox.txt
  254,666 kXHC1983.txt
   33,384 kZVariant.txt

とりあえず、このうちどれが必要なのかを調べないといけない。タグの説明は下記にある。
http://www.unicode.org/reports/tr38/
関連記事
スポンサーサイト




※任意
※任意


※入れておくと後で編集できます
管理者のみ閲覧可

help

この記事のトラックバックURL:
カレンダー
2019/10
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
ページナビ
twitter
スケジュール
ピンイン入力
四声数字を四声記号に変換します
(a,e,i,o,u,v(=ü); 1,2,3,4)

リンク集
Copyright 2019 空があんなに高い Some rights reserved.
Photo by Rain Drop // Template by chocolat* // Powered by FC2