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

プロフィール
どんぱん
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;
}

このインチキプログラムで、数十分もかかってやっと処理が終わり、タグごとにたくさんのファイルが出来上がった。タグはそれぞれに役割があるので、そこから必要なものを利用する。

≫続きを読む
スポンサーサイト



| |
カレンダー
2019/11
- - - - - 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
ページナビ
タグ: C言語
| |
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