Tuesday, November 22, 2005

 

Some notes on Symbols - 2

1.
from http://www.cnblogs.com/baoquan/archive/2007/12/04/981721.html

.Net与字符编码(理论篇)
0. 从ASCII码说起
学过电脑的人都听说过ASCII码,这是一种根据英文字符表设计的字符编码。严格意义上来讲,标准ASCII码只有7位(最高位为0),共128个字符,用十进制表示是:0-127。其中0-31和127为控制字符,而32-126为显示字符。国际标准化组织还发布了一些8位ASCII码扩展字符集,其中最流行的就是ISO 8859-1 (ISO Latin1)。它除了兼容标准的7位ASCII字符集以外,还利用高字节位扩充了一些西欧国家常用的字符和符号。尽管如此,由于ASCII码属于单字节编码(SBCS, or Single Byte Character Set),所以它最多只能表示256个字符。

显然,ASCII码“不懂中文"。那谁懂呢?

1. DBCS路过
记得99年我刚接触电脑的时候,还能看到UCDOS的身影。那会儿经常听老师说一句话:“一个汉字包含两个字节”——这其实就是DBCS (Double Byte Character Set,双字节字符集)使用的方法。DBCS是最常见的MBCS(Multi-Byte Character Set,多字节字符集),它保留了ASCII码的128个字符(0-127),并且对一般的非拉丁字符采用双字节编码。第一个字节(前导字节,Lead Byte)使用一个大于127的数字(即高字节位为1),和第二字节(尾随字节,Trailing Byte)一起组成一个字符。所以,在DBCS里面,ASCII字符仍占1个字节,而象中文、日文等字符则占2个字节。

我们常使用的DBCS编码有:

字符编码
第一字节范围
第二字节范围
第一字节最高位
第二字节最高位
字符数
说明
GB2312
(1980) A1..F7
A1..FE
1 1 7445
简体字符集(基于区位码设计,高低字节各加了$A0)
Big5
(1984, CP950)
81..FE
40..7E A1..FE
1 0或1
13461
繁体字符集(香港、台湾、澳门等)
GBK 1.0
(1993, CP936)
81..FE
40..FE 80..FE
1
0或1
21886
兼容GB2312,支持Unicode 1.1中定义的CJK(简/繁体中文、日语和韩语)
GB18030
(2000, CP54936) 27484 兼容GBK1.0,支持Unicode3.1
有单字节、双字节和四字节三种方式

表1.1 常见的DBCS编码

备注:

GB2312分为二级:一级为常用字,3755个,按照拼音排序;二级为次常用字,3008个,按照部首排序。
GBK 1.0是Microsoft对GB2312的扩展。
说到这里,就要引入一个很重要的概念——代码页(Code Page, CP)。我们常说的代码页实际上是Windows为不同的字符编码方案所分配的一个数字编号。下面列举了一些常见的代码页:

代码页 描述
CP932 日语 (Shift-JIS)
CP936 简体中文 (GBK)
CP950 繁体中文 (Big5)
CP1252 Windows (ANSI) Codepage, 基于ISO-8859-1标准
CP1200 UCS-2LE (Unicode little-endian)
CP1201 UCS-2BE (Unicode big-endian)
CP12000 UTF-32 LE
CP12000 UTF-32 BE
CP54936 GB18030
CP65001 UTF-8 Unicode

表1.2 常见的Windows代码页

DBCS编码总是和系统的代码页联系在一起的。在不同的代码页里面,同一串数据可能会被映射成不同的字符。比如“BA BA D7 D6 41 42 43”,在简体中文环境下(GBK,CP936),它会被映射成成“汉字ABC”;若当前代码页为繁体中文 (Big5, CP950),它就变成了“犖趼ABC”;如果选择ISO8859-1代码页的话,那我们会看到“ººÓïABC”——这就是我们常说的乱码,即没有选择正确的编码。另外当某个字符编码在当前代码页中不存在时,系统会用一个特殊的符号来显示它(方框或问号)。比如将“©2007 Google”保存为ANSI文本文件,再打开时就变成了“?2007 Google”。

另外,不知道您发现了没有,对于DBCS编码的文本来说,如果其中有一个字节丢失或损坏,就可能造成整个文件出现乱码的情况。比如“.Net与字符编码(理论篇)”在内存中表示为:

“2E 4E 65 74 D3 EB D7 D6 B7 FB B1 E0 C2 EB A3 A8 C0 ED C2 DB C6 AA A3 A9”

其中D3 EB是“与”的内码(GBK),此时刚好前导字节和尾随字节都大于7F (127)。如果这时候我们把D3改成00,保存后重新打开。你猜会怎么样?它已经变得面目全非了:“.Net 胱址嗦耄ɡ砺燮 ”。

所以说,DBCS编码存储效率比较高,但可惜的是它包含的字符数量有限,最重要的是我们不能同时使用不同语言中的字符。而且从上面的例子可以看出,DBCS编码并不是很适合网络传输。

那我们该怎么办呢?

2. Unicode登场
字符是语言中最小的逻辑单位,而Unicode所做的就是为每个字符分配一个唯一的数字(Code Point,字位)并定义一系列规则,并且与程序、平台以及语言无关。使用Unicode编码,我们就可以用一种统一的方式来表示和处理不同语言中的字符,而这在以前是不可能做到的。(比如,“汉字ABCÖเอกรัตน์이설희“)。Unicode编码仅仅兼容了ISO-8859-1标准,比如U+0041表示'A',U+00A9表示'©'。像简体的"汉"字则是用U+6C49来表示的(其GBK内码是BABA)。

ISO10646标准曾经定义了两种Unicode字符集方案UCS (Universal Character Set):分别是UCS-2和UCS-4(2字节编码和4字节编码)。采用UCS-4编码的字符有31位(最高位为0),理论上有0x80000000 (U-00000000-U-7FFFFFFF)个字位。整个编码空间(Code Space)分成128个组,每组有256个平面,每一平面包含256行,每行又有256个字位。其中00组的00平面(即第零平面)被称为基本多文种平面 (BMP, Basic Multilingual Plane)。BMP共含有256*256=65536个字位,这么大的空间已经包含了当今世界上绝大多数常用字符(Wikipedia上有一张关于BMP如何分配的Roadmap,有兴趣的话可以看看)。UCS-2就是对BMP中的字符进行编码,无论英文字符还是非拉丁字符,均用2个字节表示,显然UCS-2只是UCS-4的一个子集。

据资料显示,现存的汉字已经超过了9万。显然对于某些专业领域来说,BMP收录的2万多汉字是远远不够用的。2000年国家为了争取主动权,开始对我国境内销售的非嵌入式软件产品强制实行GB18030标准。该标准除了兼容GB2312和GBK以外,还收录了CJK扩展字符集A中的6千多汉字。它同时定义了4字节编码,为我国少数民族及以后的扩展保留了大量的可用编码空间。

在这样的环境下,Unicode组织推出了UTF-16和UTF-32编码方案,同时取代了原有的UCS-2和UCS-4。UTF(Unicode Transformation Format)编码格式保留了UCS-4中的前17个平面(U+000000 - U+10FFFF)作为有效编码空间。其中UTF-16是UCS-2的扩展:对于BMP内的字符,它和UCS-2的编码相同(2字节);对于BMP以外的字符则采用一对16位字组合(surrogate pairs)的方式进行编码(4字节)。组合编码的高字位(High Surrogate)在U+D800–U+DBFF,低字位(Low Surrogate)在U+DC00-U+DFFF。UTF-32则是在有效编码空间范围内,对所有字符全部使用4字节编码。

除了UTF-16和UTF-32,还有一种常用的Unicode编码UTF-8。接下来我们分析这几种编码有什么区别。使用系统自带的记事本和Debug工具,我们可以比较,在不同编码下将字符串"汉字ABC"保存到Text文件后在内存中的表示:

编码形式 编码结果(含BOM)
UTF-8 EF BB BF E6 B1 89 E8 AF AD 41 42 43
UTF-16 LE FF FE 49 6C ED 8B 41 00 42 00 43 00
UTF-16 BE FE FF 6C 49 8B ED 00 41 00 42 00 43
UTF-32 LE FF FE 00 00 49 6C 00 00 ED 8B 00 00 41 00 00 00 42 00 00 00 43 00 00 00
UTF-32 BE 00 00 FE FF 00 00 6C 49 00 00 8B ED 00 00 00 41 00 00 00 42 00 00 00 43

表2.1 Unicode编码形式

我们发现,在Windows的平面文件中,每种Unicode编码都用一串字节来标识自己。我们把这串连续的字节称为BOM (Byte-order Mark,字节顺序标识)。它使用一个特殊字符U+FEFF (ZERO WIDTH NO-BREAK SPACE)来表示编码形式和字节顺序。

为什么会有字节顺序呢?说道这里,就要补一补基本知识了。现代的计算机系统一般采用字节(Octet, 8 bit Byte)作为逻辑寻址单位。当物理单位的长度大于1个字节时,就要区分字节顺序(Byte Order, or Endianness)。常见的字节顺序有两种:Big Endian(High-byte first)和Little Endian(Low-byte first),这就是表2.1中的BE和LE。Intel X86平台采用Little Endian,而PowerPC处理器则采用了Big Endian。举例来说,整型数字$1234ABCD存储的时候就会有两种方式:

字节顺序 内存数据 备注
Big Endian (BE)
0x12 0x34 0xAB 0xCD 此时的0x12被称为most significant byte (MSB)

Little Endian (LE)
0xCD 0xAB 0x34 0x12 此时的0xCD被称为least significant byte (LSB)


表2.2 字节顺序

需要注意的是,DBCS编码仍以字节作为基本编码单元,因而不会有字节顺序问题,而Unicode使用16位字(WORD)来编码,所以才会有LE和BE之分。另外从表2.1中我们可以看出UTF-8并没有字节顺序问题,使用BOM只是为了标识而已。






接下来我们一起看看UTF-8的编码方法:

编码范围
UTF-8

U-00000000 – U-0000007F 0xxxxxxx
U-00000080 – U-000007FF 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

表2.3 UTF-8 编码方法

我们先看看“汉”字的UTF-8编码。“汉”字U+6C49用二进制表示是:0110 1100 0100 1001,对应U-00000800 – U-0000FFFF区间,将这些二进制位放入对应的位置后就变成了:11100110 10110001 10001001,再将其转换成十六进制是E6 B1 89。因此我们不难算出字符串“汉字ABC”用UTF-8编码后变为“E6 B1 89 E8 AF AD 41 42 43”,这也和表2.1中的数据一致。

分析完常见的几种Unicode编码格式,我们来总结一下这几种编码格式所需要的字节个数以及各自的优缺点。

编码范围
UTF-8
UTF-16
UTF-32
GB18030 *

U+000000 – U+00007F
1
2
4
1

U+000080 – U+00009F
U+0000A0 – U+0003FF
U+000400 – U+0007FF
2
2
4
2

U+000800 – U+003FFF
U+004000 – U+00FFFF
3
2
4
2

U+010000 – U+03FFFF
U+040000 – U+10FFFF
4
4
4
4


表2.4 常见Unicode编码所需的字节数

备注:GB18030并不是真正意义上的Unicode编码,仅作参考

UTF-8、UTF-16和UTF-32都可以表示有效编码空间(U+000000-U+10FFFF)内的所有Unicode字符。
使用UTF-8编码时ASCII字符只占1个字节,存储效率比较高,适用于拉丁字符较多的场合以节省空间。
对于大多数非拉丁字符(如中文和日文)来说,UTF-16所需存储空间最小,每个字符只占2个字节。
Windows NT内核是Unicode(UTF-16),采用UTF-16编码在调用系统API时无需转换,处理速度也比较快。
采用UTF-16和UTF-32会有LE和BE之分,而UTF-8则没有字节顺序问题,所以UTF-8适合传输和通信。
UTF-32采用4字节编码,一方面处理速度比较快,但另一方面也浪费了大量空间,影响传输速度,因而很少使用。

#4楼 回复 引用
@Muse
GB18030是国家标准,兼容GBK1.0和GB2312。具体信息可以参考DBCS节以及相关资源中的《GB18030-2000 - The New Chinese National Standard》。
Windows系统并不支持GB18030,需要安装GB18030 Support Package。
http://www.microsoft.com/downloads/details.aspx?familyid=fc02e2e3-14bb-46c1-afee-3732d6249647&displaylang=en

P.S. .NET中使用String就可以了,在需要转换成GB18030编码时,可以采用代码页映射表。
2007-12-04 09:41 | Baoquan

UTF-8 and Unicode FAQ for Unix/Linux
http://www.cl.cam.ac.uk/~mgk25/unicode.html

Comparison of Unicode encodings
http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings

Unicode.org
http://www.unicode.org/

Unicode FAQ
http://www.unicode.org/faq/basic_q.html

Character set encoding basics
http://scripts.sil.org/IWS-Chapter03

http://www.blogjava.net/NeonWay/archive/2007/01/29/96437.html

http://ccl.pku.edu.cn/doubtfire

GB18030-2000 - The New Chinese National Standard
http://developers.sun.com/dev/gadc/technicalpublications/articles/gb18030.html

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
http://blog.csdn.net/fmddlmyy/archive/2005/05/04/372148.aspx

谈谈Windows程序中的字符编码
http://www.fmddlmyy.cn/text7.html

ISO/IEC 10646大字符集及其发展动态
http://www2.ccw.com.cn/1995/45/135303.shtml

Monday, November 21, 2005

 

Some notes on Symbols - 1

some previous notes can be found at

http://telestarnotes.blogspot.com/2004/05/some-notes-on-widechar-and-unicode-in.html

I.

出处作者不详

_T()和L的特点与区别是什么?

Visual C++里边定义字符串的时候,用_T来保证兼容性,是一种数据类型,但是它不会产生结果,被编译系统的预处理系统来解释,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
如果将来你不打算升级到unicode,那么也不需要_T!

_T是将字符串转换为TCHAR,TCHAR是一个宏定义,当定义了UNICODE时TCHAR等同于 WCHAR,否则等同于CHAR。为了和以后的平台兼容,建议使用TCHAR,而不要使用普通的CHAR。例子:TCHAR *s = _T("FSDF")。
L将字符串转换为WCHAR,用于需要UNICODE的环境。例子:WCHAR *s = L"FSDF"。

Example:
SetWindowText(_T("我很好"));
在中文Win2000上正常,在英文Win2000下就是乱码!
// _T()自动将()内字符串转成unicode or Multibyte-character or SBCS (ASCII) 根据系统宏定义,
// 为了将程序与vb等unicode 编码的程序交互,为了程序的国际化,为了...
// 看msdn! 如果定义了 UNICODE 就变成 L把字符串转换成宽字符,否则没用。
// 统一的字符编码标准, 采用双字节对字符进行编码
// _T把参数转换成当前系统支持的字符,例如支持UNICODE就转换成宽字符,否则就是单字符
#ifdef UNICODE
#define _T(x) L##x
#else
#define _T(x) x
#endif
_T/_TEXT是在TCHAR.H头文件中定义的宏。
在_UNICODE和_MBCS都没有定义时,对其后的字符串无影响
在_MBCS定义时,对其后的字符串无影响
在_UNICODE定义时,其后的字符串被定义为 L(即转换为Unicode字符)
本质上是为了生成Unicode和非Unicode通用的程序而定义的宏。

Unicode:宽字节字符集..
1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
2. 如何对DBCS(双字节字符集)字符串进行操作?
函数 描述
PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址
PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 返回字符串中上一个字符的地址
BOOL IsDBCSLeadByte( BYTE ); 如果该字节是DBCS字符的第一个字节,则返回非0值
3. 为什么要使用Unicode?
(1) 可以很容易地在不同语言之间进行数据交换。
(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。
(3) 提高应用程序的运行效率。
Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成 Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符 串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序 更加有效地运行。
Windows CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI Windows函数
Windows 98 只支持ANSI,只能为ANSI开发应用程序。
Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。
4. 如何编写Unicode源代码?
Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使 用Unicode来对它进行编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。
_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。
5. Windows定义的Unicode数据类型有哪些?
数据类型 说明
WCHAR Unicode字符
PWSTR 指向Unicode字符串的指针
PCWSTR 指向一个恒定的Unicode字符串的指针
对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。
ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。
6. 如何对Unicode进行操作?
字符集 特性 实例
ANSI 操作函数以str开头 strcpy
Unicode 操作函数以wcs开头 wcscpy
MBCS 操作函数以_mbs开头 _mbscpy
ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)
所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定义:
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE
7. 如何表示Unicode字符串常量?
字符集 实例
ANSI “string”
Unicode L“string”
ANSI/Unicode T(“string”)或_TEXT(“string”)if( szError[0] == _TEXT(‘J’) ){ }
8. 为什么应当尽量使用操作系统函数?
这将有助于稍稍提高应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程Explorer.exe所使用。由于这些函数使用得很多,因此,在应用程序运行时,它们可能已经被装入RAM。
如:StrCat,StrChr,StrCmp和StrCpy等。
9. 如何编写符合ANSI和Unicode的应用程序?
(1) 将文本串视为字符数组,而不是chars数组或字节数组。
(2) 将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。
(3) 将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。
(4) 将TEXT宏用于原义字符和字符串。
(5) 执行全局性替换(例如用PTSTR替换PSTR)。
(6) 修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递 (sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要 按字节来分配内存。这就是说,应该调用malloc(nCharacters *sizeof(TCHAR)),而不是调用malloc(nCharacters)。
10. 如何对字符串进行有选择的比较?
通过调用CompareString来实现。
标志 含义
NORM_IGNORECASE 忽略字母的大小写
NORM_IGNOREKANATYPE 不区分平假名与片假名字符
NORM_IGNORENONSPACE 忽略无间隔字符
NORM_IGNORESYMBOLS 忽略符号
NORM_IGNOREWIDTH 不区分单字节字符与作为双字节字符的同一个字符
SORT_STRINGSORT 将标点符号作为普通符号来处理
11. 如何判断一个文本文件是ANSI还是Unicode?
判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。
12. 如何判断一段字符串是ANSI还是Unicode?
用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此 IsTextUnicode有可能返回不正确的结果。
13. 如何在Unicode与ANSI之间转换字符串?
Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。

2.
from http://dev.21tx.com/2002/12/05/10065.html

Visual C++.NET中的字符串转换方法

  Visual C++.net涉及到ATL/ATL Server、MFC和托管C++等多种编程方式,不仅功能强大而且应用广泛。在编程中,我们常常会遇到ANSI、Unicode以及BSTR不同编码类型的字符串转换操作。本文先介绍基本字符串类型,然后说明相关的类,如CComBSTR、_bstr_t、CStringT等,最后讨论它们的转换方法,其中还包括使用最新ATL7.0的转换类和宏,如CA2CT、CA2TEX等。

  一、BSTR、LPSTR和LPWSTR

  在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。

  那么什么是BSTR、LPSTR以及LPWSTR呢?

  BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。

  LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等,它们的含义如图2所示。

  例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为 char*。

  一般地,还有下列类型定义:

#ifdef UNICODE
 typedef LPWSTR LPTSTR;
 typedef LPCWSTR LPCTSTR;
#else
 typedef LPSTR LPTSTR;
 typedef LPCSTR LPCTSTR;
#endif

  二、CString、CStringA 和 CStringW

  Visual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。这些字符类型是TCHAR、char和wchar_t。TCHAR在Unicode平台中等同于WCHAR(16位Unicode字符),在ANSI中等价于char。wchar_t通常定义为unsigned short。由于CString在MFC应用程序中经常用到,这里不再重复。

  三、VARIANT、COleVariant 和_variant_t

  在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:

struct tagVARIANT {
 VARTYPE vt;
 union {
  short iVal; // VT_I2.
  long lVal; // VT_I4.
  float fltVal; // VT_R4.
  double dblVal; // VT_R8.
  DATE date; // VT_DATE.
  BSTR bstrVal; // VT_BSTR.
  …
  short * piVal; // VT_BYREF|VT_I2.
  long * plVal; // VT_BYREF|VT_I4.
  float * pfltVal; // VT_BYREF|VT_R4.
  double * pdblVal; // VT_BYREF|VT_R8.
  DATE * pdate; // VT_BYREF|VT_DATE.
  BSTR * PBstrVal; // VT_BYREF|VT_BSTR.
 };
};

  显然,VARIANT类型是一个C结构,它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如,如果vt为VT_I2,那么我们可以从iVal中读出VARIANT的值。同样,当给一个VARIANT变量赋值时,也要先指明其类型。例如:

VARIANT va;
:: VariantInit(&va); // 初始化
int a = 2002;
va.vt = VT_I4; // 指明long数据类型
va.lVal = a; // 赋值

  为了方便处理VARIANT类型的变量,Windows还提供了这样一些非常有用的函数:

  VariantInit —— 将变量初始化为VT_EMPTY;

  VariantClear —— 消除并初始化VARIANT;

  VariantChangeType —— 改变VARIANT的类型;

  VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。

  COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COleVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。例如下面的代码:

COleVariant v1("This is a test"); // 直接构造
COleVariant v2 = "This is a test";
// 结果是VT_BSTR类型,值为"This is a test"
COleVariant v3((long)2002);
COleVariant v4 = (long)2002;
// 结果是VT_I4类型,值为2002

  _variant_t是一个用于COM的VARIANT类,它的功能与COleVariant相似。不过在Visual C++.NET的MFC应用程序中使用时需要在代码文件前面添加下列两句:

  #include "comutil.h"

  #pragma comment( lib, "comsupp.lib" )

 四、CComBSTR和_bstr_t

  CComBSTR是对BSTR数据类型封装的一个ATL类,它的操作比较方便。例如:

CComBSTR bstr1;
bstr1 = "Bye"; // 直接赋值
OLECHAR* str = OLESTR("ta ta"); // 长度为5的宽字符
CComBSTR bstr2(wcslen(str)); // 定义长度为5
wcscpy(bstr2.m_str, str); // 将宽字符串复制到BSTR中
CComBSTR bstr3(5, OLESTR("Hello World"));
CComBSTR bstr4(5, "Hello World");
CComBSTR bstr5(OLESTR("Hey there"));
CComBSTR bstr6("Hey there");
CComBSTR bstr7(bstr6);
// 构造时复制,内容为"Hey there"

  _bstr_t是是C++对BSTR的封装,它的构造和析构函数分别调用SysAllocString和SysFreeString函数,其他操作是借用BSTR API函数。与_variant_t相似,使用时也要添加comutil.h和comsupp.lib。

  五、BSTR、char*和CString转换

  (1) char*转换成CString

  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

char chArray[] = "This is a test";
char * p = "This is a test";

  或

LPSTR p = "This is a test";

  或在已定义Unicode应的用程序中

TCHAR * p = _T("This is a test");

  或

LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;

  (2) CString转换成char*

  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

  方法一,使用强制转换。例如:

CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。例如:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数

  (3) BSTR转换成char*

  方法一,使用ConvertBSTRToString。例如:

#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[]){
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完释放
delete[] lpszText2;
return 0;
}

  方法二,使用_bstr_t的赋值运算符重载。例如:

_bstr_t b = bstrText;
char* lpszText2 = b;

  (4) char*转换成BSTR

  方法一,使用SysAllocString等API函数。例如:

BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);

  方法二,使用COleVariant或_variant_t。例如:

//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;

  方法三,使用_bstr_t,这是一种最简单的方法。例如:

BSTR bstrText = _bstr_t("This is a test");

  方法四,使用CComBSTR。例如:

BSTR bstrText = CComBSTR("This is a test");

  或

CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;

  方法五,使用ConvertStringToBSTR。例如:

char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);

  (5) CString转换成BSTR

  通常是通过使用CStringT::AllocSysString来实现。例如:

CString str("This is a test");
BSTR bstrText = str.AllocSysString();

SysFreeString(bstrText); // 用完释放

  (6) BSTR转换成CString

  一般可按下列方法进行:

BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;

  或

CStringA str(bstrText);

  (7) ANSI、Unicode和宽字符之间的转换

  方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。

  方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:

TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;

  方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:

  其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示例代码:

LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);

  六、结语

  几乎所有的程序都要用到字符串,而Visual C++.net由于功能强大、应用广泛,因而字符串之间的转换更为频繁。本文几乎涉及到目前的所有转换方法。当然对于.NET框架来说,还可使用Convert和Text类进行不同数据类型以及字符编码之间的相互转换。

Tuesday, November 15, 2005

 

Some notes on Chinese Captical Numbers

I.
中国人民银行的有关正确填写票据和结算凭证的基本规定

银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载账务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。

一、中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、佰、仟、万(万)、亿、元、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、廿、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,如貳、陸、億、萬、圓的,也应受理。

二、中文大写金额数字到“元”为止的,在“元”之后,应写“整”(或“正”)字,在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。

三、中文大写金额数字前应标明“人民币”字样,大写金额数字应紧接“人民币”字样填写,不得留有空白。大写金额数字前未印“人民币”字样的,应加填“人民币”三字。在票据和结算凭证大写金额栏内不得预印固定的“仟、佰、拾、万、仟、伯、拾、元、角、分”字样。

四、阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:

(一)阿拉伯数字中间有“O”时,中文大写金额要写“零”字。如¥1,409.50,应写成人民币壹仟肆佰零玖元伍角。

(二)阿拉伯数字中间连续有几个“0”时,中文大写金额中间可以只写一个“零”字。如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。

(三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。

(四)阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾伍元零肆分。

五、阿拉伯小写金额数字前面,均应填写入民币符号“¥”(或草写:)。阿拉伯小写金额数字要认真填写,不得连写分辨不清。

六、票据的出票日期必须使用中文大写。为防止变造票据的出禀日期,在填写月、日时,月为壹、贰和壹拾的,日为壹至玖和壹拾、贰拾和叁拾的,应在其前加“零”;日为抬壹至拾玖的,应在其前加“壹”。如1月15日,应写成零壹月壹拾伍日。再如10月20日,应写成零壹拾月零贰拾日。

七、票据出票日期使用小写填写的,银行不予受理。大写日期未按要求规范填写的,银行可予受理,但由此造成损失的,由出票入自行承担。

本类型中的相关算法遵守以上基本规定,但尽可能短,即:可以不写“零”的地方一律不写“零”。此外,考虑到有可能“人民币”字样已印在纸样上,本类型返回的大写金额串结果中将不出现该字样。

Friday, November 11, 2005

 

Some notes on Chinese Lunar Years

I.
首先还是来个恐怖的查表法

计算农历的一个类

By wangfei@hanwang.com.cn
From http://www.moon-soft.com/program/doc/readelite9948.htm

“ 致看到这些源代码的兄弟:
你好!
这本来是我为一个商业PDA产品开发的日历程序,最近移植于PC机上, 所以算法和数据部分是用纯C++写的,不涉及MFC,所有的代码都是以短节省存储空间为主要目的.很高兴你对这些代码有兴趣,你可以随意复制和使用些代码,唯一有一点小小的愿望:在你使用和复制给别人时,别忘注明这些代码作者:-)。程序代码也就罢了,后面的数据可是我辛辛苦苦从万年历上找出来输进去的。如果你有什么好的意见不妨Mail给我。

wangfei@hanwang.com.cn 或 wangfei@engineer.com.cn 2000年”

.h file

#if !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__IN

CLUDED_)
#define AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6D4__INCLUDE

D_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Calendar1.h : header file
//////////////////////////////////////////////////////////////////////

///////
// CCalendar window
extern const WORD START_YEAR;
extern const WORD END_YEAR;

//define user message select changed
#define UM_SELCHANGE (WM_USER+101)

class CCalendar : public CWnd
{
private:
WORD m_iYear, m_iMonth, m_iDay;
CBitmap m_oBitMapList[42];
CMenu m_oPopMenu;

public:
COLORREF m_dwBackColor, m_dwForeColor;
COLORREF m_dwSelColor, m_dwSelForeColor;
COLORREF m_dwTitleBkColor, m_dwTitleColor;

public:
CCalendar(WORD iYear, WORD iMonth, WORD iDay);
CCalendar();
virtual BOOL Create(RECT &rect, CWnd * pParentWnd, UINT nID);

public:
WORD GetYear(){return m_iYear;}
WORD GetMonth(){return m_iMonth;}
WORD GetDay(){return m_iDay;}
void GetDate(WORD &iYear, WORD &iMonth, WORD &iDay);
BOOL SetDate(WORD iYear, WORD iMonth, WORD iDay);

protected:
CButton m_obutToday;
//{{AFX_MSG(CCalendar)
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
//}}AFX_MSG
afx_msg void OnTitleBkColor();
afx_msg void OnTitleColor();
afx_msg void OnSelColor();
afx_msg void OnForeColor();
DECLARE_MESSAGE_MAP()


public:
//判断iYear是不是闰年
static BOOL IsLeapYear(WORD iYear)
{return !(iYear%4)&&(iYear%100) || !(iYear%400);}

//计算iYear,iMonth,iDay对应是星期几 1年1月1日 --- 65535年12月31日
static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay);

//返回iYear年iMonth月的天数 1年1月 --- 65535年12月
static WORD MonthDays(WORD iYear, WORD iMonth);

//返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,


//高字为第二个iLunarMonth月的天数,否则高字为0
// 1901年1月---2050年12月
static LONG LunarMonthDays(WORD iLunarYear, WORD iLunarMonth);

//返回阴历iLunarYear年的总天数
// 1901年1月---2050年12月
static WORD LunarYearDays(WORD iLunarYear);

//返回阴历iLunarYear年的闰月月份,如没有返回0
// 1901年1月---2050年12月
static WORD GetLeapMonth(WORD iLunarYear);

//把iYear年格式化成天干记年法表示的字符串
static void FormatLunarYear(WORD iYear, char *pBuffer);

//把iMonth格式化成中文字符串
static void FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar = TRU

E);

//把iDay格式化成中文字符串
static void FormatLunarDay(WORD iDay, char *pBuffer);

//计算公历两个日期间相差的天数 1年1月1日 --- 65535年12月31日
static LONG CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndDay,


WORD iStartYear = START_YEAR,
WORD iStartMonth =1, WORD iStartDay =1);

//计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24


//1901年1月1日---2050年12月31日
static WORD GetLunarDate(WORD iYear, WORD iMonth, WORD iDay,
WORD &iLunarYear, WORD &iLunarMonth, WORD &iLun

arDay);

public:
virtual ~CCalendar();

private:
void l_InitData();

//计算从1901年1月1日过iSpanDays天后的阴历日期
static void l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay,

LONG iSpanDays);
//计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气
static WORD l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay);

WORD l_CalcSelectDay(POINT * pt);
void l_PaintTitle(CPaintDC &dc);
void l_PaintDate(CPaintDC &dc);
inline void l_PaintOneDay(CPaintDC &dc, CDC &imgdc, WORD &iDay,
WORD &iLunarYear,
WORD &iLunarMonth, WORD &iLuanrDay,
LONG startx, LONG starty);
};

//////////////////////////////////////////////////////////////////////

///////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediatel

y before the previous line.

#endif // !defined(AFX_CALENDAR1_H__FD9A6DAF_8C3C_493C_AAD4_612134D8F6

D4__INCLUDED_)

.cpp file

#include "stdafx.h"
#include "Calendar.h"
#include "Calendar1.h"
#include "Calendarfrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////////////////////////////////////////////////////////

///////
// CCalendar


extern WORD gLunarMonthDay[];
extern BYTE gLunarMonth[];
extern BYTE gLunarHolDay[];

const WORD START_YEAR =1901;
const WORD END_YEAR =2050;

void CCalendar::l_InitData()
{
SYSTEMTIME systime;
::GetSystemTime(&systime);

m_iYear = systime.wYear;
m_iMonth = systime.wMonth;
m_iDay = systime.wDay;

m_dwBackColor = RGB(255,255,255);
m_dwForeColor = RGB(0,0,0);
m_dwSelColor = RGB(150,150,230);
m_dwSelForeColor = RGB(255,255,255);
m_dwTitleBkColor = RGB(190,70,70);
m_dwTitleColor = RGB(255,255,0);

}

CCalendar::CCalendar(WORD iYear, WORD iMonth, WORD iDay)
{
if(!SetDate(iYear, iMonth, iDay))
l_InitData();
}

CCalendar::CCalendar()
{
l_InitData();
}

CCalendar::~CCalendar()
{
DestroyWindow();
}


BEGIN_MESSAGE_MAP(CCalendar, CWnd)
//{{AFX_MSG_MAP(CCalendar)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_CONTEXTMENU()
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_COMMAND(ID_TITLEBKCOLOR, OnTitleBkColor)
ON_COMMAND(ID_TITLECOLOR, OnTitleColor)
ON_COMMAND(ID_SELCOLOR, OnSelColor)
ON_COMMAND(ID_FORECOLOR, OnForeColor)
END_MESSAGE_MAP()

#define COL_WIDTH 32
#define ROW_HEIGHT 20
#define TITLE_HEIGHT 20

BOOL CCalendar::Create(RECT &rect, CWnd *pParentWnd, UINT nID)
{
CString szClassName = AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|


CS_HREDRAW|CS_VREDRAW,
0, (HBRUSH)CBrush(RGB(25

5,255,255)), 0);

rect.right = rect.left + COL_WIDTH*7 +4;
rect.bottom = rect.top + TITLE_HEIGHT+ROW_HEIGHT*6 +10 ;
if(!CWnd::CreateEx(WS_EX_CLIENTEDGE, szClassName, _T(""),
WS_CHILD|WS_VISIBLE|WS_TABSTOP, rect,
pParentWnd, nID, NULL))

return FALSE;

UpdateWindow();
for(int i=0; i<42; i++)
m_oBitMapList[i].LoadBitmap(IDB_BITMAP1+i);

m_oPopMenu.CreatePopupMenu();
m_oPopMenu.AppendMenu(MF_STRING, ID_TITLEBKCOLOR, _T("标题背景色...")

);
m_oPopMenu.AppendMenu(MF_STRING, ID_TITLECOLOR, _T("标题前景色...")

);
m_oPopMenu.AppendMenu(MF_STRING, ID_FORECOLOR , _T("日期前景色...")

);
m_oPopMenu.AppendMenu(MF_STRING, ID_SELCOLOR, _T("选中区颜色..."

));

return TRUE;
}

//////////////////////////////////////////////////////////////////////

///////
// CCalendar message handlers
void CCalendar::l_PaintTitle(CPaintDC &dc)
{
CRect rect ;
GetClientRect(&rect);

rect.left ++; rect.top ++;
rect.right --; rect.bottom = rect.top + TITLE_HEIGHT;
dc.FillRect(&rect, &CBrush(m_dwTitleBkColor));

dc.SetBkColor(m_dwTitleBkColor);
dc.SetTextColor(m_dwTitleColor);

int startx = rect.left +8;
char sztext[][3]={"日","一","二","三","四","五","六"};
for(int i=0; i <7; i++)
{
dc.TextOut(startx, rect.top +2, sztext[i]);
startx += COL_WIDTH;
}
}

void CCalendar:: l_PaintOneDay(CPaintDC &dc, CDC &imgdc, WORD &iDay,


WORD &iLunarYear, WORD &iLunarMonth,
WORD &iLunarDay,
LONG startx, LONG starty)
{
char text[3];
sprintf(text, "%2d", iDay);

// select icon
if(iLunarDay!=1)
imgdc.SelectObject(&m_oBitMapList[iLunarDay-1]);
else
imgdc.SelectObject(&m_oBitMapList[29+iLunarMonth]);

// if day == current day
if(iDay++ == m_iDay)
{
dc.FillRect(&CRect(startx-1, starty,
startx +COL_WIDTH-3, starty + ROW_HEIGHT),
&CBrush(m_dwSelColor));
dc.SetTextColor(m_dwSelForeColor);
dc.SetBkColor(m_dwSelColor);
dc.TextOut(startx, starty +2, text);
dc.SetBkColor(m_dwBackColor);
dc.SetTextColor(m_dwForeColor);
dc.BitBlt(startx+17, starty +2, 8,16,&imgdc,0,0,MERGEPAINT);
}
else
{
dc.TextOut(startx, starty+2, text);
dc.BitBlt(startx+17, starty +2, 8,16,&imgdc,0,0,SRCCOPY);
}

if(iLunarDay<29)
iLunarDay++;
else
{
LONG days = LunarMonthDays(iLunarYear, iLunarMonth);
if(!HIWORD(days) && iLunarDay == LOWORD(days))
iLunarMonth = (iLunarMonth)%12+1;
if(iLunarDay < LOBYTE(days))
iLunarDay++;
else
iLunarDay =1;
}
}

void CCalendar::l_PaintDate(CPaintDC &dc)
{
CDC imgdc;
imgdc.CreateCompatibleDC(&dc);

RECT rect;
GetClientRect(&rect);
rect.top +=TITLE_HEIGHT+6;

dc.SetBkColor(m_dwBackColor);
dc.SetTextColor(m_dwForeColor);

WORD day =1;
WORD iLunarYear, iLunarMonth, iLunarDay;
GetLunarDate(m_iYear, m_iMonth, 1, iLunarYear, iLunarMonth, iLunarD

ay);

for(int i=0; i<6; i++, rect.top += ROW_HEIGHT)
{
long startx = rect.left +2;
for(int j=0; j<7; j++,startx += COL_WIDTH)
{
if(j < WeekDay(m_iYear, m_iMonth, 1) && i==0)
continue;

if(day > MonthDays(m_iYear, m_iMonth))
break;

l_PaintOneDay(dc, imgdc, day, iLunarYear, iLunarMonth,
iLunarDay, startx, rect.top);
}
}
}

void CCalendar::OnPaint()
{
CPaintDC dc(this); // device context for painting

CFont *font = ((CCalendarFrm *)GetParent())->GetDispFont();
dc.SelectObject(font);
dc.SetMapMode(0);
l_PaintTitle(dc);
l_PaintDate(dc);

}

LONG CCalendar::CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndD

ay,
WORD iStartYear, WORD iStartMonth, WORD iStartD

ay)
{
WORD monthday[]={0, 31, 59 ,90, 120, 151, 181, 212, 243, 273, 304, 33

4};

//计算两个年份1月1日之间相差的天数
LONG iDiffDays =(iEndYear - iStartYear)*365;
iDiffDays += (iEndYear-1)/4 - (iStartYear-1)/4;
iDiffDays -= ((iEndYear-1)/100 - (iStartYear-1)/100);
iDiffDays += (iEndYear-1)/400 - (iStartYear-1)/400;

//加上iEndYear年1月1日到iEndMonth月iEndDay日之间的天数
iDiffDays += monthday[iEndMonth-1] +
(IsLeapYear(iEndYear)&&iEndMonth>2? 1: 0)

;
iDiffDays += iEndDay;

//减去iStartYear年1月1日到iStartMonth月iStartDay日之间的天数
iDiffDays -= (monthday[iStartMonth-1] +
(IsLeapYear(iStartYear)&&iStartMonth>2 ? 1: 0));
iDiffDays -= iStartDay;
return iDiffDays;
}

void CCalendar::l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay

, LONG iSpanDays)
{
//阳历1901年2月19日为阴历1901年正月初一
//阳历1901年1月1日到2月19日共有49天
if(iSpanDays <49)
{
iYear = START_YEAR-1;
if(iSpanDays <19)
{
iMonth = 11;
iDay = 11+WORD(iSpanDays);
}
else
{
iMonth = 12;
iDay = WORD(iSpanDays) -18;
}
return ;
}
//下面从阴历1901年正月初一算起
iSpanDays -=49;
iYear = START_YEAR;
iMonth = 1;
iDay = 1;
//计算年
LONG tmp = LunarYearDays(iYear);
while(iSpanDays >= tmp)
{
iSpanDays -= tmp;
tmp = LunarYearDays(++iYear);
}
//计算月
tmp = LOWORD(LunarMonthDays(iYear, iMonth));
while(iSpanDays >= tmp)
{
iSpanDays -= tmp;
if(iMonth == GetLeapMonth(iYear))
{
tmp = HIWORD(LunarMonthDays(iYear, iMonth));
if(iSpanDays < tmp)
break;
iSpanDays -= tmp;
}
tmp = LOWORD(LunarMonthDays(iYear, ++iMonth));
}
//计算日
iDay += WORD(iSpanDays);
}

WORD CCalendar::GetLunarDate(WORD iYear, WORD iMonth, WORD iDay,
WORD &iLunarYear, WORD &iLunarMonth, WORD &iLun

arDay)
{
l_CalcLunarDate(iLunarYear, iLunarMonth, iLunarDay,
CalcDateDiff(iYear, iMonth, iDay));

return l_GetLunarHolDay(iYear, iMonth, iDay);
}

//根据节气数据存储格式,计算阳历iYear年iMonth月iDay日对应的节气,
WORD CCalendar::l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay)


{
BYTE &flag = gLunarHolDay[(iYear - START_YEAR)*12+iMonth -1];
WORD day;
if(iDay <15)
day= 15 - ((flag>>4)&0x0f);
else
day = ((flag)&0x0f)+15;
if(iDay == day)
return (iMonth-1) *2 + (iDay>15? 1: 0) +1;
else
return 0;
}

void CCalendar::GetDate(WORD &iYear, WORD &iMonth, WORD &iDay)
{
iYear = m_iYear;
iMonth = m_iMonth;
iDay = m_iDay;
}

BOOL CCalendar::SetDate(WORD iYear, WORD iMonth, WORD iDay)
{
if(iYear < START_YEAR || iYear > END_YEAR || iMonth <1 || iMonth >12

)
return FALSE;

if(iDay <1 || iDay > MonthDays(iYear, iMonth))
return FALSE;

m_iYear = iYear;
m_iMonth = iMonth;
m_iDay = iDay;

return TRUE;
}

WORD CCalendar::WeekDay(WORD iYear, WORD iMonth, WORD iDay)
{
//数组元素monthday[i]表示第i个月以前的总天数除以7的余数
WORD monthday[]={0,3,3,6,1,4,6,2,5,0,3,5};
WORD iDays = (iYear-1)%7 + (iYear-1)/4 - (iYear-1)/100 +(iYear-1)/400

;
iDays += (monthday[iMonth-1] +iDay) ;
//如果iYear是闰年
if(IsLeapYear(iYear) && iMonth>2)
iDays++;
//返回:0,1,2,3,4,5,6表日、一、二、三、四、五、六
return iDays%7;
}

WORD CCalendar::MonthDays(WORD iYear, WORD iMonth)
{
switch(iMonth)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
break;
case 4:case 6:case 9:case 11:
return 30;
break;
case 2:
//如果是闰年
if(IsLeapYear(iYear))
return 29;
else
return 28;
break;
}
return 0;
}

WORD CCalendar::GetLeapMonth(WORD iLunarYear)
{
BYTE &flag = gLunarMonth[(iLunarYear - START_YEAR)/2];
return (iLunarYear - START_YEAR)%2 ? flag&0x0f : flag>>4;
}

LONG CCalendar::LunarMonthDays(WORD iLunarYear, WORD iLunarMonth)
{
if(iLunarYear < START_YEAR)
return 30L;

WORD height =0 ,low =29;
int iBit = 16 - iLunarMonth;

if(iLunarMonth > GetLeapMonth(iLunarYear) && GetLeapMonth(iLunarYe

ar))
iBit --;

if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<low ++;

if(iLunarMonth == GetLeapMonth(iLunarYear))
if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<< (iBit -1)))
height =30;
else
height =29;

return MAKELONG(low, height);
}

WORD CCalendar::LunarYearDays(WORD iLunarYear)
{
/*
WORD days=348 ; //12*29
int month = 12 ;
//如果iYear年有闰月,则为13个月
if(gLanarMonth[iYear - START_YEAR])
month ++;
//如果某月是三十天则days++
while(month >=0 && (gLanarMonthDay[iYear - START_YEAR] & (1 << (16 -

month))))
{
days ++;
month --;
}
return days;
*/
WORD days =0;
for(WORD i=1; i<=12; i++)
{
LONG tmp = LunarMonthDays(iLunarYear ,i);
days += HIWORD(tmp);
days += LOWORD(tmp);
}
return days;
}

void CCalendar::FormatLunarYear(WORD iYear, char *pBuffer)
{
char szText1[]="甲乙丙丁戊己庚辛壬癸";
char szText2[]="子丑寅卯辰巳午未申酉戌亥";
char szText3[]="鼠牛虎免龙蛇马羊猴鸡狗猪";

memcpy(pBuffer, szText1+((iYear-4)%10)*2,2);
memcpy(pBuffer+2,szText2+((iYear-4)%12)*2,2);
pBuffer[4]=' ';
memcpy(pBuffer+5,szText3+((iYear-4)%12)*2,2);
strcpy(pBuffer+7,"年");
}

void CCalendar::FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar)

{
if(!bLunar && iMonth==1)
{
strcpy(pBuffer, " 一月");
return;
}

char szText[]="正二三四五六七八九十";
if(iMonth<=10)
{
memcpy(pBuffer, " ", 2);
memcpy(pBuffer+2, szText + (iMonth -1)*2, 2);
strcpy(pBuffer+4 , "月");
return;
}
if (iMonth == 11)
strcpy(pBuffer, "十一");
else
strcpy(pBuffer, "十二");
strcpy(pBuffer+4 , "月");


}
void CCalendar::FormatLunarDay(WORD iDay, char *pBuffer)
{
char szText1[]="初十廿三";
char szText2[]="一二三四五六七八九十";
if(iDay != 20 && iDay !=30)
{
memcpy(pBuffer, szText1 + (iDay-1)/10*2 ,2);
memcpy(pBuffer+2, szText2 + ((iDay-1)%10)*2 ,2);
pBuffer[4]='\0';
}
else
{
memcpy(pBuffer, szText1 + iDay/10*2, 2);
strcpy(pBuffer+2, szText2 +18);
}
}
WORD CCalendar::l_CalcSelectDay(POINT * pt)
{
RECT rect;
GetClientRect(&rect);
WORD iRow = (pt->y - rect.top -26)/ROW_HEIGHT;
WORD iCol = (pt->x - rect.left )/COL_WIDTH;

WORD startcol ,endrow, endcol;
startcol = WeekDay(m_iYear, m_iMonth, 1);
endcol = WeekDay(m_iYear, m_iMonth, MonthDays(m_iYear,m_iMonth));

endrow = (MonthDays(m_iYear, m_iMonth) + startcol -1)/7 ;
if(iRow == 0 && iCol < startcol || iRow == endrow && iCol > endcol

|| iRow > endrow)
return 0;
return iRow *7 + iCol + 1 - startcol ;
}

void CCalendar::OnLButtonDown(UINT nFlags, CPoint point)
{
WORD day = l_CalcSelectDay(&point);
if(day !=0 && day != m_iDay)
{
m_iDay = day;
::PostMessage(GetParent()->m_hWnd, UM_SELCHANGE, MAKELONG(m_iMonth,
m_iYear), m_iDay);
}
SetFocus();
CWnd::OnLButtonDown(nFlags, point);
}


void CCalendar::OnContextMenu(CWnd* pWnd, CPoint point)
{
m_oPopMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, p

oint.y,
this);
}

void CCalendar::OnTitleBkColor()
{
CColorDialog colordlg;
if(colordlg.DoModal() != IDOK)
return;
m_dwTitleBkColor = colordlg.GetColor();
Invalidate();
}

void CCalendar::OnTitleColor()
{
CColorDialog colordlg;
if(colordlg.DoModal() != IDOK)
return;
m_dwTitleColor = colordlg.GetColor();
Invalidate();
}

void CCalendar::OnSelColor()
{
CColorDialog colordlg;
if(colordlg.DoModal() != IDOK)
return;

m_dwSelColor = colordlg.GetColor();
Invalidate();
}

void CCalendar::OnForeColor()
{
CColorDialog colordlg;
if(colordlg.DoModal() != IDOK)
return;

m_dwForeColor = colordlg.GetColor();
Invalidate();
}

#undef COL_WIDTH
#undef ROW_HEIGHT
#undef TITLE_HEIGHT
/*********************************************************************

*********
下面为阴历计算所需的数据,为节省存储空间,所以采用下面比较变态的存储方

法.

**********************************************************************

*********/
//数组gLunarDay存入阴历1901年到2100年每年中的月天数信息,
//阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表3

0天,否则为29天
WORD gLunarMonthDay[]=
{
//测试数据只有1901.1.1 --2050.12.31
0X4ae0, 0Xa570, 0X5268, 0Xd260, 0Xd950, 0X6aa8, 0X56a0, 0X9ad0, 0X4a

e8, 0X4ae0, //1910
0Xa4d8, 0Xa4d0, 0Xd250, 0Xd548, 0Xb550, 0X56a0, 0X96d0, 0X95b0, 0X49

b8, 0X49b0, //1920
0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada8, 0X2b60, 0X9570, 0X4978, 0X49

70, 0X64b0, //1930
0Xd4a0, 0Xea50, 0X6d48, 0X5ad0, 0X2b60, 0X9370, 0X92e0, 0Xc968, 0Xc9

50, 0Xd4a0, //1940
0Xda50, 0Xb550, 0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc958, 0Xa950, 0Xb4

a8, 0X6ca0, //1950
0Xb550, 0X55a8, 0X4da0, 0Xa5b0, 0X52b8, 0X52b0, 0Xa950, 0Xe950, 0X6a

a0, 0Xad50, //1960
0Xab50, 0X4b60, 0Xa570, 0Xa570, 0X5260, 0Xe930, 0Xd950, 0X5aa8, 0X56

a0, 0X96d0, //1970
0X4ae8, 0X4ad0, 0Xa4d0, 0Xd268, 0Xd250, 0Xd528, 0Xb540, 0Xb6a0, 0X96

d0, 0X95b0, //1980
0X49b0, 0Xa4b8, 0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada0, 0Xab60, 0X93

70, 0X4978, //1990
0X4970, 0X64b0, 0X6a50, 0Xea50, 0X6b28, 0X5ac0, 0Xab60, 0X9368, 0X92

e0, 0Xc960, //2000
0Xd4a8, 0Xd4a0, 0Xda50, 0X5aa8, 0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc9

58, 0Xa950, //2010
0Xb4a0, 0Xb550, 0Xb550, 0X55a8, 0X4ba0, 0Xa5b0, 0X52b8, 0X52b0, 0Xa9

30, 0X74a8, //2020
0X6aa0, 0Xad50, 0X4da8, 0X4b60, 0X9570, 0Xa4e0, 0Xd260, 0Xe930, 0Xd5

30, 0X5aa0, //2030
0X6b50, 0X96d0, 0X4ae8, 0X4ad0, 0Xa4d0, 0Xd258, 0Xd250, 0Xd520, 0Xda

a0, 0Xb5a0, //2040
0X56d0, 0X4ad8, 0X49b0, 0Xa4b8, 0Xa4b0, 0Xaa50, 0Xb528, 0X6d20, 0Xad

a0, 0X55b0, //2050

};

//数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节

存两年
BYTE gLunarMonth[]=
{
0X00, 0X50, 0X04, 0X00, 0X20, //1910
0X60, 0X05, 0X00, 0X20, 0X70, //1920
0X05, 0X00, 0X40, 0X02, 0X06, //1930
0X00, 0X50, 0X03, 0X07, 0X00, //1940
0X60, 0X04, 0X00, 0X20, 0X70, //1950
0X05, 0X00, 0X30, 0X80, 0X06, //1960
0X00, 0X40, 0X03, 0X07, 0X00, //1970
0X50, 0X04, 0X08, 0X00, 0X60, //1980
0X04, 0X0a, 0X00, 0X60, 0X05, //1990
0X00, 0X30, 0X80, 0X05, 0X00, //2000
0X40, 0X02, 0X07, 0X00, 0X50, //2010
0X04, 0X09, 0X00, 0X60, 0X04, //2020
0X00, 0X20, 0X60, 0X05, 0X00, //2030
0X30, 0Xb0, 0X06, 0X00, 0X50, //2040
0X02, 0X07, 0X00, 0X50, 0X03 //2050
};

//数组gLanarHoliDay存放每年的二十四节气对应的阳历日期
//每年的二十四节气对应的阳历日期几乎固定,平均分布于十二个月中
// 1月 2月 3月 4月 5月 6月


//小寒 大寒 立春 雨水 惊蛰 春分 清明 谷雨 立夏 小满 芒种 夏


// 7月 8月 9月 10月 11月 12月


//小暑 大暑 立秋 处暑 白露 秋分 寒露 霜降 立冬 小雪 大雪 冬



/*********************************************************************

************
节气无任何确定规律,所以只好存表,要节省空间,所以....
下面这种存法实在是太变态了,你就将就着看吧
**********************************************************************

************/
//数据格式说明:
//如1901年的节气为
// 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月

11月 12月
// 6, 21, 4, 19, 6, 21, 5, 21, 6,22, 6,22, 8, 23, 8, 24, 8, 24, 8, 24

, 8, 23, 8, 22
// 9, 6, 11,4, 9, 6, 10,6, 9,7, 9,7, 7, 8, 7, 9, 7, 9, 7, 9

, 7, 8, 7, 15
//上面第一行数据为每月节气对应日期,15减去每月第一个节气,每月第二个节气

减去15得第二行
// 这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节

气数据,低位存放
//第二个节气的数据,可得下表

BYTE gLunarHolDay[]=
{
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1901
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1902
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7

8, //1903
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8

7, //1904
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1905
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1906
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7

8, //1907
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1908
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1909
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1910
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X7

8, //1911
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1912
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1913
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1914
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7

8, //1915
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1916
0X95, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8

7, //1917
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1918
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7

8, //1919
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1920
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8

7, //1921
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1922
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78, 0X7

8, //1923
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1924
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X8

7, //1925
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1926
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1927
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1928
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1929
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1930
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1931
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1932
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1933
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1934
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1935
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1936
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1937
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1938
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1939
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1940
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1941
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1942
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1943
0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1944
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1945
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7

7, //1946
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1947
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //1948
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79, 0X77, 0X8

7, //1949
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7

7, //1950
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X7

8, //1951
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //1952
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1953
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68, 0X78, 0X8

7, //1954
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1955
0X96, 0XA5, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //1956
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1957
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1958
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1959
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1960
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1961
0X96, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1962
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1963
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1964
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1965
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1966
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1967
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1968
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1969
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1970
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X7

7, //1971
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1972
0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1973
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1974
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7

7, //1975
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X89, 0X88, 0X78, 0X87, 0X8

7, //1976
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //1977
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8

7, //1978
0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7

7, //1979
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1980
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X77, 0X8

7, //1981
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1982
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X7

7, //1983
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1984
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //1985
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1986
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78, 0X8

7, //1987
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //1988
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1989
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //1990
0X95, 0XB4, 0X96, 0XA5, 0X86, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1991
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //1992
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1993
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1994
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X76, 0X78, 0X69, 0X78, 0X8

7, //1995
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //1996
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //1997
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //1998
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //1999
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2000
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2001
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //2002
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //2003
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2004
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2005
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2006
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X8

7, //2007
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8

6, //2008
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2009
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2010
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78, 0X8

7, //2011
0X96, 0XB4, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8

6, //2012
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2013
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2014
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //2015
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8

6, //2016
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2017
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2018
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //2019
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X8

6, //2020
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2021
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2022
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77, 0X8

7, //2023
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9

6, //2024
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2025
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2026
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //2027
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9

6, //2028
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2029
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2030
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X8

7, //2031
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9

6, //2032
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2033
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78, 0X87, 0X8

7, //2034
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2035
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9

6, //2036
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

6, //2037
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2038
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2039
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X9

6, //2040
0XA5, 0XC3, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8

6, //2041
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2042
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2043
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88, 0X87, 0X9

6, //2044
0XA5, 0XC3, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X8

6, //2045
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X8

7, //2046
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X8

7, //2047
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5, 0X97, 0X87, 0X87, 0X88, 0X86, 0X9

6, //2048
0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X8

6, //2049
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87, 0X8

7 //2050

};

II.
再看一个简单算法

基于组件的C#农历算法

By talentz
From http://www.chinaitpower.com/A/2001-12-17/8126.html

// 下面是一个关于C#的农历算法
// 日期数据定义方法如下
// 前12个字节代表1-12月为大月或是小月,1为大月30天,0为小月29天,
// 第13位为闰月的情况,1为大月30天,0为小月29天,第14、15位为闰月的月
// 份,使用10进制表示。最后4位为当年家农历新年-即农历1月1日所在公历
// 的日期,如0131代表1月31日。
// 日期函数使用方式如下i公历年为要输入的公历年,i公历月为公历月,i公历日为
// 公历日,返回值为:属相 ,天干地支,农历年农历月农历日。

using System;

namespace 农历组件
{
public class 农历
{
private string[] m_str农历日历表;
private string[] m_str天干地支表;
private string m_str属相表;
private string m_str农历月表;
private string m_str农历日表;
private int m_i最大公历年份;
private int m_i最小公历年份;

public 农历()
{
m_str农历日历表 = new string[] {
"0100101101101080131",
"0100101011100000219",
"1010010101110000208",
"0101001001101050129",
"1101001001100000216",
"1101100101010000204",
"0110101010101040125",
"0101011010100000213",
"1001101011010000202",
"0100101011101020122",
"0100101011100000210",
"1010010011011060130",
"1010010011010000218",
"1101001001010000206",
"1101010101001050126",
"1011010101010000214",
"0101011010100000204",
"1001011011010020123",
"1001010110110000211",
"0100100110111070201",
"0100100110110000220",
"1010010010110000208",
"1011001001011050128",
"0110101001010000216",
"0110110101000000205",
"1010110110101040124",
"0010101101100000213",
"1001010101110000202",
"0100100101111020123",
"0100100101110000210",
"0110010010110060130",
"1101010010100000217",
"1110101001010000206",
"0110110101001050126",
"0101101011010000214",
"0010101101100000204",
"1001001101110030124",
"1001001011100000211",
"1100100101101070131",
"1100100101010000219",
"1101010010100000208",
"1101101001010060127",
"1011010101010000215",
"0101011010100000205",
"1010101011011040125",
"0010010111010000213",
"1001001011010000202",
"1100100101011020122",
"1010100101010000210",
"1011010010101070129",
"0110110010100000217",
"1011010101010000206",
"0101010110101050127",
"0100110110100000214",
"1010010110110000203",
"0101001010111030124",
"0101001010110000212",
"1010100101010080131",
"1110100101010000218",
"0110101010100000208",
"1010110101010060128",
"1010101101010000215",
"0100101101100000205",
"1010010101110040125",
"1010010101110000213",
"0101001001100000202",
"1110100100110030121",
"1101100101010000209",
"0101101010101070130",
"0101011010100000217",
"1001011011010000206",
"0100101011101050127",
"0100101011010000215",
"1010010011010000203",
"1101001001101040123",
"1101001001010000211",
"1101010100101080131",
"1011010101000000218",
"1011011010100000207",
"1001011011010060128",
"1001010110110000216",
"0100100110110000205",
"1010010010111040125",
"1010010010110000213",
"1011001001011100202",
"0110101001010000220",
"0110110101000000209",
"1010110110101060129",
"1010101101100000217",
"1001001101110000206",
"0100100101111050127",
"0100100101110000215",
"0110010010110000204",
"0110101001010030123",
"1110101001010000210",
"0110101100101080131",
"0101101011000000219",
"1010101101100000207",
"1001001101101050128",
"1001001011100000216",
"1100100101100000205",
"1101010010101040124",
"1101010010100000212",
"1101101001010000201",
"0101101010101020122",
"0101011010100000209",
"1010101011011070129",
"0010010111010000218",
"1001001011010000207",
"1100100101011050126",
"1010100101010000214",
"1011010010100000214"
};
m_str属相表 = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
m_str农历月表 = "正二三四五六七八九十寒腊";
m_str农历日表 = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十";
m_i最大公历年份 = 2011;
m_i最小公历年份 = 1900;

string str天干 = "甲乙丙丁戊已庚辛壬癸";
string str地支 = "子丑寅卯辰巳午未申酉戌亥";
m_str天干地支表 = new string[60];
for (int i = 0; i < 60; i++)
{
m_str天干地支表[i] = str天干.Substring(i % 10, 1) + str地支.Substring(i % 12, 1);
}

}

public string 日期(int i公历年,
int i公历月,
int i公历日)
{
if ( (i公历年 < m_i最小公历年份) || (i公历年 > m_i最大公历年份) )
{ //如果不是有效公历日期,退出。
return "无效公历年份";
}

// 计算农历年
int i农历年;
int i农历月;
int i农历日;

i农历年 = i公历年;
// 农历新年月份
i农历月 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(15, 2)));
// 农历新年日子
i农历日= Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(17, 2)));;

if ( (i公历月 < i农历月) || ( (i公历月 == i农历月) && (i公历日 < i农历日)) )
{
i农历年--;
// 农历新年月份
i农历月 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(15, 2)));
// 农历新年日子
i农历日= Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(17, 2)));;
}

// 计算农历月
DateTime dt公历日期 = new DateTime(i公历年, i公历月, i公历日);
DateTime dt农历日期 = new DateTime(i农历年, i农历月, i农历日);
TimeSpan ts日期差 = dt公历日期 - dt农历日期;
int i天数 = ts日期差.Days;

i农历月 = 1;
i农历日 = 1;
bool b闰月 = false;
for (int i = 0; i < i天数; i++)
{
i农历日++;
if (i农历日 == 30 + Convert.ToInt32(m_str农历日历表[i农历年 - m_i最小公历年份].Substring(i农历月 - 1, 1)) ||
(b闰月 && ( i农历日 == 30 + Convert.ToInt32( m_str农历日历表[i农历年 - m_i最小公历年份].Substring(12, 1) ) )) )
{
if ( (b闰月 == false) && (i农历月 == Convert.ToInt32(m_str农历日历表[i农历年 - m_i最小公历年份].Substring(13, 2))) )
{
b闰月= true;
}
else
{
b闰月 = false;
i农历月++;
}
i农历日 = 1;
}
else
{
}
}

// 计算农历日
string str农历日 = m_str农历日表.Substring((i农历日 -1) * 2, 2);

// 计算农历月
string str农历月 = m_str农历月表.Substring(i农历月 - 1, 1) + "月";
if (b闰月)
{
str农历月 = "闰" + str农历月;
}

// 农历年
string str农历年 = Convert.ToString(i农历年, 10) + "年";

// 计算天干地支
string str天干地支 = m_str天干地支表[ (i农历年 - 4) % 60 ];

// 计算属相
string str属相 = m_str属相表.Substring((i农历年 - 4) % 12, 1);

// 返回农历日期
return str属相 + "," + str天干地支 + "," + str农历年 + str农历月 + str农历日;
}
}
}

III.
基于台湾的林洵贤先生编写的经典的200年JavaScript万年历的程序数不胜数,这里提个新的XML的

如何为live.com编写并添加自己的Gadget
By 维生素C.net
From http://www.cnblogs.com/lovewangshu/archive/2005/11/05/269332.html

IV.
eroica的改进JavaScript万年历的程序

多功能万年历原创代码解析(0)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(0)
发信站: 北大未名站 (2002年05月02日20:28:40 星期四) , 站内信件



早就听人说JavaScript是一种很“弱智”语言,只能实现一些简单的效果和功能。我以
前也是这样想,但曾经见到国外极为优秀的JS脚本,让我大开了眼界。而且,到目前为止我
深爱JS,甚至胜过C,说实话,目前会的程序语言也就是C和JS了。C是大一学的,当时是DOS
下的,学完甚觉无用,也确实一直没用上,现在忘了差不多了。自从去年学JS便发觉她易学
易用,直观实用,常常令人兴奋,于是一开始便喜欢上了她。

我早就想编一个万年历的程序放在网上,去年刚学完JavaScript是曾编了一个,凑合能
用,但算法麻烦,每一年的农历信息需要17个数来确定,另外节气计算公式也有点错误。后
来,我偶然在网上发现了由台湾的林洵贤先生编写的经典的200年JavaScript万年历,大大小
小的网站许多都用了林先生的年历(但大多数没说明版权),当时十分叹服。觉得自己和别
人毕竟差了好大一截。现在,终于,我竟已经写了自己的万年历,算法与林先生的截然不同
,适用年数近三千年,并且功能与准确度也是非林先生的万年历所能及的,如正规历书上记
载1985年春分是3月21日,这与本年历计算结果完全一致,而林先生的万年历则给出是3月20
日,其原因是我的算法考虑了岁差与章动,而林先生的则是用平节气的简单算法。

从编写第一个函数开始,到最近的一个BUG的去除,本年历断断续续地耗时一个多月(但
核心程序的编写不到一个月),要知道我还在念书,这些工作只能在课余完成。整个程序的
创作过程,有时是令人惊心动魄的,有时又是那么令人厌倦不堪,但无论如何,现在看来这
一切都是无法言传的,所有激情都将过去,一切又将从头开始。

未名BBS是我最常去的一个,Homepage版曾给了我很多帮助,各位网友也常常给我支持与
鼓励。所以我才决定从今天开始在未名公开这一两个月来辛苦编写的代码。希望各位大虾能
继续给我鼓励,并不断改进这些代码,使之不断完善,从而为广大网友服务。

最后,应当感谢曾次亮先生和Erling Poulsen,曾先生几十年的辛苦劳动使我得以将他
的节气计算方法公式化,而我的朔望交食程序则是在Erling Poulsen的程序上加以简化和应
用的。另外,部分节日我也参考了林洵贤先生的万年历,在此也表示感谢。

我想应该是迄今为止最全的万年历,从公元前850年(我国历法开始)—公元2100年,公
历(包括格里历和儒略历)与农历对照,星期,星座,生肖,儒略日,年月日时干支,24节气的
交节时刻(最大误差10分钟),以及月亮朔望的时刻(最大误差3分钟),还有日月食预报功
能。梅雨,夏三伏,冬三九也准确显示。当然,还会显示公历节日,传统节日,名人纪念日,以及生
日等等。后来又增加了历史年号(目前至隋朝)、个人日记、人体生物周期节律、倒计时设
置等更加实用的功能。这样,本年历就几乎涵盖了网上大部分日期时间类的脚本功能,更何
况实现了简单脚本无法实现的功能呢?

完全用JavaScript开发,纯文本文件的大小不过20KB,代码中详细列有各种有关日期的
函数,比JavaScript内置的日期函数功能强大得多,可以根据需要随时调用。在此基础上利用FS
COMMAND技术可以作成Flash应用程序。

全代码完全手写,没有调用任何JavaScript内置的日期函数(除非调用当前时刻),重
新编制各种日期时间函数,思路新颖,计算方法简洁。

由于刚刚制作并初步调试完成,界面还很粗糙,但这已经断断续续花费了我很多的时间
,待日后进一步完善。

声明

1、本代码由aqyw(eroica)原创,在未名BBS的Homepage版首次公开,欢迎大家引用和改
进,但希望大家能珍惜作者的劳动,最好能注明出处。

2、由于时间仓促,代码可能在一些细节上不太优化,有些功能没继续实现(如儒略历与
格里历的互换等),或者变量和函数的名称可笑而不确切,但由于精力和时间关系,作者没
能完善,还请大家见谅。

3、本代码仅供参考,个别地方有误敬请大家指出。大家在实际应用中可以按需要引用某
些原文件(如只用阴历,或只用生物钟等,有点象C中的头文件)。

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]
※ 修改:·eroica 於 05月02日20:33:05 修改本文·[FROM: 210.31.66.32]

多功能万年历原创代码解析(1)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(1)
发信站: 北大未名站 (2002年05月02日20:36:55 星期四) , 站内信件

本代码由math.js、solar.js、sterm.js、ganzhi.js、lunar.js、string.js、ftvl.js、ni
anhao.js、cookies.js、humancyc.js、float.js、diary.js、countdown.js及dw.js等js文
件组成。下面就分别介绍之。
(一)数学函数集——math.js
我想不用过多解释了,大家肯定看得懂。此函数集只是为了后面引用时书写方便而已。
PI()——返回圆周率3.141592653589793
sin(x)——返回x的正弦
cos(x)——返回x的余弦
abs(x)——返回x的绝对值
floor(x)——返回x的下界取整值
round(x)——返回x的四舍五入值
tail(x)——返回x的小数尾数,若x为负值,则是1-小数尾数
rem(x,w)——返回x对w的广义求余

代码:

//-------数学函数------//

function PI(){
return Math.PI;
}

function sin(x){
return Math.sin(x);
}

function cos(x){
return Math.cos(x);
}

function abs(x){
return Math.abs(x);
}

function floor(x){
return Math.floor(x);
}

function round(x){
return Math.round(x);
}

function tail(x){
return x-floor(x);
}

function rem(x,w){ //广义求余
return tail(x/w)*w;
}

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]
※ 修改:·eroica 於 05月02日20:39:09 修改本文·[FROM: 210.31.66.32]

多功能万年历原创代码解析(2)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(2)
发信站: 北大未名站 (2002年05月02日20:41:46 星期四) , 站内信件

(二)公历函数集——solar.js

关于公历的一些算法和公式偶在几年前就想出了,但今年寒假回家发现有些错误,后来终于
弄对了。

先介绍一些函数的用途:

ifGr(y,m,d,opt)——判断y年m月(1,2,..,12,下同)d日是Gregorian历还是Julian历(opt=1
,2,3分别表示标准日历,Gregorge历和Julian历),是则返回1,是Julian历则返回0,若是Gr
egorge历所删去的那10天则返回-1
D0(y,m,d)——返回阳历y年m月d日的日差天数(在y年年内所走过的天数,如2000年3月1日为
61)
antiD0(y,x)——返回阳历y年日差天数为x时所对应的月日数(如y=2000,x=274时,返回10
01(表示10月1日,即返回100*m+d))
D(y)——返回y年的年差天数(y年1月1日距相应历种的1年1月1日的天数)
erD(y,m,d)——返回等效标准天数(y年m月d日相应历种的1年1月1日的等效(即对Gregorian
历与Julian历是统一的)天数)
JD(y,m,d,h,min,sec,zone)——返回儒略日(zone时区y年m月d日h时min分sec秒距儒略历公
元前4713年1月1日格林尼治时间正午12时的天数) Day(y,m,d)——返回星期数(y年m月d日
的星期数,如星期日为0)
sZod(m,d)——返回星座数(m月d日的星座序号,如摩羯座为0)

代码:


//---------公历--------//

//判断Gregorian历还是Julian历
function ifGr(y,m,d,opt){ //阳历y年m月(1,2,..,12,下同)d日,opt=1,2,3分别表示标准
日历,Gregorge历和Julian历

if(opt==1){
if(y>1582||(y==1582&&m>10)||(y==1582&&m==10&&d>14))
return(1); //Gregorian
else
if(y==1582&&m==10&&d>=5&&d<=14)
return(-1); //空
else
return(0); //Julian
}

if(opt==2)
return(1); //Gregorian
if(opt==3)
return(0); //Julian

}

//日差天数
function D0(y,m,d){
var ifG=ifGr(y,m,d,1);
var monL=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
if(ifG)
if((y%100!=0&&y%4==0)||(y%400==0))
monL[2]+=1;
else ;
else
if(y%4==0)
monL[2]+=1;
else ;
var v=0;
for(var i=0;i<=m-1;i++){
v+=monL[i];
}
v+=d;
if(y==1582){
if(ifG==1)
v-=10;
if(ifG==-1)
v=1/0; //infinity
}
return v;
}

//反日差天数
function antiD0(y,x){
var m=1;
for(var j=1;j<=12;j++){
var mL=D0(y,j+1,1)-D0(y,j,1);
if(x<=mL||j==12){
var m=j;
break;
}
else
x-=mL;
}
return 100*m+x;
}

//年差天数
function D(y){
var v=(y-1)*365+floor((y-1)/4); //Julian的年差天数
if(y>1582)
v+=-floor((y-1)/100)+floor((y-1)/400); //Gregorian的年差天数
return v;
}

//等效标准天数
function erD(y,m,d){
var v=(y-1)*365+floor((y-1)/4)+D0(y,m,d)-2; //Julian的等效标准天数
if(y>1582)
v+=-floor((y-1)/100)+floor((y-1)/400)+2; //Gregorian的等效标准天数
return v;
}

//儒略日
function JD(y,m,d,h,min,sec,zone){
var ifG=ifGr(y,m,d,1);
var jt=(h+(min+sec/60)/60)/24-0.5-zone/24;
var jd=(ifG)?(erD(y,m,d)+1721425+jt):(erD(y,m,d)+1721425+jt);//儒略日
return jd;
}

//星期
function Day(y,m,d){
return erD(y,m,d)%7;
}

//星座
function sZod(m,d){
var zodd=new Array(1222,122,222,321,421,522,622,722,822,922,1022,1122,1222);
if((100*m+d)>=zodd[0]||(100*m+d) var i=0;
else
for(var i=1;i<12;i++){
if((100*m+d)>=zodd[i]&&(100*m+d) break;
}
return i;
}

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]
※ 修改:·eroica 於 05月02日20:44:45 修改本文·[FROM: 210.31.66.32]

多功能万年历原创代码解析(3)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(3)
发信站: 北大未名站 (2002年05月02日21:00:39 星期四) , 站内信件

(二)节气函数集——sterm.js

节气是最让我头疼的问题,我几乎想了一个寒假都没能想出一个比较准确的计算公式。我
以前的算法和林洵贤先生的200年日历中的一样,都是用“平气”(即把地球绕日轨道完全2
4等分,且认为地球公转周期恒定不变),所以时间跨度两百年以上就有误差了,林先生的日
历也有个别错误。其原因在于地球公转周期会随时间变化,而且地球自转轴受太阳、行星及
月球影响绕北天极转动,这些因素称为岁差和章动。当初我真的快要放弃了,但回到北京会
马上出现了转机。
那天去西单图书大厦,偶然发现了曾次亮先生的《四千年气朔交食速算法》,其中就给
出了节气的精确算法!我花了25元钱买下。但曾先生的书都是列了许多表格中的数据进行计
算的,我不得不把表格中的数据用手工进行拟合,好不容易才一点一点凑出了计算公式。想
来真是不容易啊!

只有一个函数:

S(y,n,pd)——返回y年第n个节气(如小寒为1)的D0(日差天数)值(pd取值为0或1,分别
表示平气和定气)

代码://节气函数
function S(y,n,pd){ //pd取值为0或1,分别表示平气和定气,该函数返回节气的D0值
var juD=y*(365.2423112-6.4e-14*(y-100)*(y-100)-3.047e-8*(y-100))+15.218427*n+1
721050.71301;//儒略日
var tht=3e-4*y-0.372781384-0.2617913325*n;//角度
var yrD=(1.945*sin(tht)-0.01206*sin(2*tht))*(1.048994-2.583e-5*y);//年差实均数
var shuoD=-18e-4*sin(2.313908653*y-0.439822951-3.0443*n);//朔差实均数
var vs=(pd)?(juD+yrD+shuoD-erD(y,1,0)-1721425):(juD-erD(y,1,0)-1721425);
return vs;
}

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]

多功能万年历原创代码解析(4)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(4)
发信站: 北大未名站 (2002年05月03日09:18:42 星期五) , 站内信件

(四)干支函数集——ganzhi.js

根据古代术数,年干支以立春为界,而月干支按节气月(从立春到雨水为一月,余类推
)赋予,日干支以子时(从现代时间23时开始)为界。

古人是用口诀来推算月和时的干支的,后来我都将它们公式化了。年和日的干支只能自
己凑公式了。


各函数的功用如下:

gan(x)——返回甲子数x对应的天干数(如33为3)
zhi(x)——返回甲子数x对应的地支数(如33为9)
yGz(y,m,d,h)——返回y年m月d日h时的年干支数(1-60)
mGz(y,m,d,h)——返回y年m月d日h时的月干支数(1-60)
dGz(y,m,d,h)——返回y年m月d日h时的日干支数(1-60)
hGz(y,m,d,h)——返回y年m月d日h时的时干支数(1-60)

代码:

//天干
function gan(x){
return x%10;
}

//地支
function zhi(x){
return x%12;
}

//年干支
function yGz(y,m,d,h){
if((D0(y,m,d)+h/24) y-=1;
return round(rem(y-3,60));
}

//月干支
function mGz(y,m,d,h){

var sN0=2*m-2;
var sDt0=S(y,sN0,1);
var sD0=antiD0(y,floor(sDt0));
var sM0=floor(sD0/100);
var sDate0=sD0%100+tail(sDt0);

var sN1=2*m-1;
var sDt1=S(y,sN1,1);
var sD1=antiD0(y,floor(sDt1));
var sM1=floor(sD1/100);
var sDate1=sD1%100+tail(sDt1);

var sN2=2*m;
var sDt2=S(y,sN2,1);
var sD2=antiD0(y,floor(sDt2));
var sM2=floor(sD2/100);
var sDate2=sD2%100+tail(sDt2);

var sN3=2*m+1;
if(sN3>24)
sN3-=24;
var sDt3=S(y,sN3,1);
var sD3=antiD0(y,floor(sDt3));
var sM3=floor(sD3/100);
var sDate3=sD3%100+tail(sDt3);

if(sM0==m){
sN2=sN1; sN1=sN0;
sDt2=sDt1; sDt1=sDt0;
sDate2=sDate1; sDate1=sDate0;
}

if(sM3==m){
sN1=sN2; sN2=sN3;
sDt1=sDt2; sDt2=sDt3;
sDate1=sDate2; sDate2=sDate3;
}

sN1=rem(sN1-1,24)+1;
sN2=rem(sN2-1,24)+1;

var mL=D0(y,m,31)-D0(y,m,0);
if(sDate2>mL)
sDate2-=mL;

var jqDate=(sN1%2==1)?sDate1:sDate2; //"节气"(n为奇数)所在的阳历日数

var gzM=((d+h/24) if(gzM<=0)
gzM+=12;
return round(rem(12*gan(yGz(y,m,d))+gzM-10,60));
}

//日干支
function dGz(y,m,d,h){
var gzD=(h<23)?erD(y,m,d):erD(y,m,d)+1;
return round(rem(gzD+15,60));
}

//时干支
function hGz(y,m,d,h){
var v=12*gan(dGz(y,m,d,h))+floor((h+1)/2)-11;
if(h==23)
v-=12;
return round(rem(v,60));
}

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]

多功能万年历原创代码解析(5)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(5)
发信站: 北大未名站 (2002年05月03日10:02:27 星期五) , 站内信件

(五)农历函数集——lunar.js

农历也是让人费尽脑汁的问题。
编写阳历的程序不难,因为阳历历法较简单,即使有闰月,也是很规则的。而阴历则不
然,
其难有三:(一)月大月小无规律。今年的一月可能是大月,但到了明年也可能是小月。一
月月大,但二月可能月大,也可能月小,月大月小既非穿插,亦非连续,唯“乱”字可谓之
矣!公认的阴历是经过观测朔望及复杂的天文计算得出的!(二)闰月无规律,唯一的规律
就是:19年7闰。具体闰在哪个月需要结合“节气”推知(无“中气”之月设闰)。(三)阴
阳历对应无规律,此点自然明了,不必多说。

好在我寒假时偶然在国外网站上发现了Erling Poulsen用JS编写的一个计算各个月朔望
时刻及判断日月食的小程序,便如获至宝,将其代码打印出来研究,得出算法和公式,然后
又将其进一步精简。这样每个阴历月的初一日我就能精确得到了,因此大小月也就能判断了
,下面的问题就只是如何判断闰月了。

我首先仍想编个程序,按照农历历法的规则让程序自动生成闰月。所依据的法则是“无
中气置闰法”:不包含中气的月份作为前一个月的闰月。因为好在节气我也能够精确计算,
所以我觉得这个思路应当可行。我成功地按照这个想法写出了“完全自然生成”的农历,但
很快便发现如下问题:

1、“无中气置闰法”也有例外(我不知是为什么)!如:1985年正月无中气,理应是闰
月,但实际不是。
2、当节气在两日的交界处时,计算的误差(尽管较小)也显得重要了。
3、历代对闰月的安插也不尽相同。秦代以前,曾把闰月放在一年的末尾,叫做“十三月
”。汉初把闰月放在九月之后,叫做“后九月”。到了汉武帝太初元年,又把闰月分插在一
年中的各月。

所以,我看到闰月无论如何也不可能“完全自然生成”了,于是想到类似林先生的方法
,用数组存储各年的农历信息。林先生用16进制来储存,每年用了6位数。而现在我只需要知
道的是每年的闰月信息,所以每年只需用1个数字即可!我用的是字符串来储存,因为JS的字
符串处理能力也是很强大的。

除此优点外,这种方法十分利于添加和输入。因为每年只需输入相应的闰月数(16进制
,无闰月则为0)即可。从公元前850年到公元后2100的闰月数是我亲自用手输入的(当然我
用JS编了一个输入的程序,既快捷,又能避免错误)。原则上说,大家还可以无限添加年代
,我因为时间和精力有限,所以只达到公元前850年(这些闰月数据来自曾先生的《四千年气
朔交食速算法》)。

函数说明:

leapMon(y)——返回农历y年的闰月数,若无闰则返回0(如2001年为4)
lunDate(y,m,d)——返回y年m月d日农历日数及日月食信息的函数,如-324.57923415,负号
表示闰月,百位3表示月偏食(2为月全食,1为日食0为无食),百位及十位表示日数,小数部分是
朔望时刻(单位为天,若该天不朔或望则小数部分为零)
lunMon(y,m,d)——返回y年m月d日农历月数,若是闰月则取负值,如-12表示闰十二月

代码:

//----------------------------------农历闰月信息--------------------------------
----------
var starY=-849; //记录从公元前850年开始
var leapM='0c0080050010a0070030c0080050010a0070030c0080050020a0070030c0080050020
a0070030c0090050020a0070030c0090050020a0060030c0060030c00900600c0c0060c00c00c00c
0c000600c0c0006090303030006000c00c060c0006c00000c0c0c0060003030006c00009009c0090
c00c009000300030906030030c0c00060c00090c0060600c0030060c00c003006009060030c00600
60c0090900c00090c0090c00c006030006060003030c0c00030c0060030c0090060030c0090300c0
080050020a0060030c0080050020b0070030c0090050010a0070030b0090060020a0070040c00800
50020a0060030c0080050020b0070030c0090050010a0070030b0090060020a0070040c008005002
0a0060030c0080050020b0070030c0090050000c0090090900900909009009009090090090900900
90090900900909009009009090090090900900900909009009090090090900900900909009009090
09009009090090090900900900909009009090060030c0090050010a0070030b0080050010900700
40c0080050020a0060030c0090040010a0060030c0090050010a0070030b0080050010a008005001
090050020a0060030c0080040010a0060030c0090050010a0070030b0080050010a0070030b00800
5001090070040c0080050020a0060030c0080040010a0060030c0090050010a0070030b008005001
090070040c0080050020a0060030c0080040010a0060030c0090050010a0060030c0090050010a00
70030b008005001090070040c0080050020a0060030c0080040010a0070030b0080050010a007004
0c0080050020a0060030c0080040010a0070030c0090050010a0070030b0080050020a0060030c00
80040010a0060030c0090050050020a0060030c0090050010b0070030c0090050010a0070040c008
0040020a0060030c0080050020a0060030c0090050010a0070030b0080040020a0060040c0090050
020b0070030c00a0050010a0070030b0090050020a0070030c0080040020a0060030c0090050010a
0070030c0090050030b007005001090050020a007004001090060020c0070050c0090060030b0080
040020a0060030b0080040010a0060030b0080050010a0050040c0080050010a0060030c00800500
10b0070030c007005001090070030b0070040020a0060030c0080040020a0070030b0090050010a0
060040c0080050020a0060040c0080050010b0070030c007005001090070030c0080050020a00700
30c0090050020a0070030c0090050020a0060040c0090050020a0060040c0090050010b0070030c0
080050030b007004001090060020c008004002090060020a008004001090050030b0080040020a00
60040b0080040c00a0060020b007005001090060030b0070050020a0060020c00800400209007003
0c008005002090070040c0080040020a0060040b0090050010a0060030b0080050020a0060040c00
80050010b00700300108005001090070030c0080050020a007003001090050030a0070030b009005
0020a0060040c0090050030b0070040c0090050010c0070040c0080060020b00700400a090060020
b007003002090060020a005004001090050030b007004001090050040c0080040c00a0060020c007
005001090060030b0070050020a0060020c008004002090060030b008004002090060030b0080040
020a0060040b0080040010b0060030b0070050010a00600400207005003080060040030700500307
006004003070050030800600400307005004090060040030700500409006005002070050030a0060
05003070050040020600400206005003002060040030700500409006004003070050040800700500
3080050040a006005003070050040020600500308005004002060050020700500400206005003070
06004002070050030800600400307005004080060040a00600500308005004002070050040900600
4002060050030b006005002070050030800600400307005004080060040030700500408006004002
0';//-849-2100
function leapMon(y){
var v=leapM.charAt(y-starY);
if(v=='a')
v=10;
if(v=='b')
v=11;
if(v=='c')
v=12;
return parseInt(v);
}
//------------------------------------------------------------------------------
----------

//------农历及日月食------//
//角度函数
function ang(x,t,c1,t0,t2,t3){
return tail(c1*x)*2*PI()+t0-t2*t*t-t3*t*t*t;
}

//返回农历日数及日月食信息的函数,如-324.57923415,负号表示闰月,百位3表示月偏食
(2为月全食,1为日食0为无食),百位及十位表示日数,小数部分是朔望时刻(单位为天,若该天
不朔或望则小数部分为零)

function lunDate(y,m,d){
var t=(y-1899.5)/100;
var ms=floor((y-1900)*12.3685);
var rpi=180/PI();
var zone=8; //时区
var f0=ang(ms,t,0,0.75933,2.172e-4,1.55e-7)+0.53058868*ms-8.37e-4*t+zone/24+0.
5;
var fc=0.1734-3.93e-4*t;
var j0=693595+29*ms;
var aa0=ang(ms,t,0.08084821133,359.2242/rpi,0.0000333/rpi,0.00000347/rpi);
var ab0=ang(ms,t,7.171366127999999e-2,306.0253/rpi,-0.0107306/rpi,-0.00001236/
rpi);
var ac0=ang(ms,t,0.08519585128,21.2964/rpi,0.0016528/rpi,0.00000239/rpi);
var leap=0; //闰月数,0则不闰
var ecli=0; //日月食
var lunD=-1; //农历日数
var shuoD=0; //本阴历月的阴历朔日数
var shuoT=0; //本阴历月的朔时刻
var wangD=0; //本阴历月的望时刻
var wangT=0; //本阴历月的阴历望日数

for(var k=-1;k<=13;k+=0.5){ //k=整数为朔,k=半整数为望
var aa=aa0+0.507984293*k;
var ab=ab0+6.73377553*k;
var ac=ac0+6.818486628*k;
var f1=f0+1.53058868*k+fc*sin(aa)-0.4068*sin(ab)+0.0021*sin(2*aa)+0.0161*sin
(2*ab)+0.0104*sin(2*ac)-0.0074*sin(aa-ab)-0.0051*sin(aa+ab);
var j=j0+28*k+f1; //朔或望的等效标准天数及时刻

//记录当前日期的j值
var lunD0=erD(y,m,d)-floor(j); //当前日距朔日的差值
if(k==floor(k)&&lunD0>=0&&lunD0<=29){
var k1=k; //记录当前时间对应的k值
shuoT=tail(j);
lunD=lunD0+1;
}
if(k==(k1+0.5)){
wangT=tail(j);
wangD=floor(j)-(erD(y,m,d)-lunD+1)+1;
}

//判断日月食
if((lunD==1&&k==k1)||(lunD==wangD&&k==(k1+0.5))){
if(abs(sin(ac))<=0.36){
var s=5.19595-0.0048*cos(aa)+0.002*cos(2*aa)-0.3283*cos(ab)-0.006*cos(aa
+ab)+0.0041*cos(aa-ab);
var r=0.207*sin(aa)+0.0024*sin(2*aa)-0.039*sin(ab)+0.0115*sin(2*ab)-0.00
73*sin(aa+ab)-0.0067*sin(aa-ab)+0.0117*sin(2*ac);
var p=abs(s*sin(ac)+r*cos(ac));
var q=0.0059+0.0046*cos(aa)-0.0182*cos(ab)+0.0004*cos(2*ab)-0.0005*cos(a
a+ab);
if(p-q<=1.5572){
ecli=1; //日食
if(k!=floor(k)){
if(p+q>=1.0129)
ecli=3; //月偏食
else
ecli=2; //月全食
}
}
}
}
}
//k循环结束

var v=lunD; //返回值
if(v==1)
v+=shuoT //朔日则返回朔的时刻
if(v==wangD)
v+=wangT; //望日则返回望的时刻

return(v+ecli*100)
}

function lunMon(y,m,d){
var lunDt=lunDate(y,m,d);
var lunD=floor(lunDt-floor(lunDt/100)*100); //农历日数
var leapN=0; //从当年到-849年的总闰月数
for(var i=-849;i<=y;i++){
if(leapMon(i)!='0')
leapN++;
}
var MonN=round((erD(y,m,d)-erD(-849,1,21)-lunD)/29.530588)-leapN //从当年到-8
49年的有效总月数(扣除闰月)

if(y<=240) MonN++;
if(y<=237) MonN--;
if(y<24) MonN++;
if(y<9) MonN--;
if(y<=-255) MonN++;
if(y<=-256) MonN+=2;
if(y<=-722) MonN++; //历史上的修改月建

var lunM=round(rem(MonN-3,12)+1);
if(lunM==leapMon(y-1)&&m==1&&d lunM*=-1; //如果y-1年末是闰月且该月接到了y年,则y年年初也是闰月
else{
if(lunM==leapMon(y))
lunM*=-1;
else{
if(lunM lunM++; //如果y年是闰月但当月未过闰月则前面多扣除了本年的闰月,这里应当
补偿
lunM=round(rem(lunM-1,12)+1);
}
}

return lunM;
}

备注:

现行农历采用的是夏历(即建寅为正),所以本年历主要采用夏历,但由于历史上改朝
换代或君王改换纪元等原因,曾有多次修改月建,在本年历中未作特别说明,现说明如下:
i)公元前256年(秦襄昭王52年)采用秦历,此前一直采用古周历(但春秋战国时各国历法不
一,较为混乱)。秦历以十月为岁首,“后九月”为闰月。
ii)公元前105年,西汉太初元年五月改历,以正月为岁首,该年有十五个月(从十月、十一
月、十二月、一月、二月、......十二月)。
iii)公元9年,新朝王莽始建国1年,以12月为正月(丑月),故上一年无“十二月”。
iv)公元23年,淮阳王改元更始,复用因寅正,以地皇十一月为更始1年的十月,故是年有两
个十月。
v)三国魏青龙5年(公元237年)三月,改元景初,建丑为正,以三月为四月,四月为五月,
...,十二月为正月。而景初三年十二月,魏复寅正,故是年有两个十二月。
vi)周武则天天授一年(载初1年,公元689年)十一月,该行周历子正。以十一月为岁首,该
为载初1年正月,故乙丑年只有十个月。
vii)久视1年十月复寅正,以正月为十一月,故是年有14个月。
viii)唐上元2年(公元761年)九月去年号,但称元年。以建子为正,月以所建辰为名,原十
月称亥月,原十一月称子月(岁首),...,原三月为辰月。而建巳月复寅正,恢复原月名,
仍称四月。故辛丑年无十一月、十二月。壬寅年有十四个月。
另外,应当指出,本年历采用的都是实朔,而从春秋战国一直到唐初用的都是平朔,所以有
在阴历日期上会有一日之差,应当说这是古人的不足。不过,古人常用日月食来校正日期(
所谓观象授时),因而此时与本年历是吻合的。

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.32]

多功能万年历原创代码解析(补5.5)发信人: eroica (aqyw), 信区: Homepage
标 题: 多功能万年历原创代码解析(补5.5)
发信站: 北大未名站 (2002年05月04日13:38:57 星期六) , 站内信件

不好意思,这个函数集忘贴了

(续五)转换成字符串的函数集——string.js

dToStr(dv)——将单位为天的纯小数转换成如同"2:07"的时间格式
dayStr(v)——将星期数转换成星期汉字,如0为"日"
szodStr(v)——将星座数转换成星座汉字,如0为"摩羯座"
gzStr(v)——将干支数转换成干支汉字,如0为"癸亥"
zodStr(v)——将生肖数转换成生肖汉字,如0为"猪"
lunMStr(v)——将农历月数转换成农历月的汉字,如-12为"闰十二月"
lunDStr(v)——将农历日数转换成农历日的汉字,如5为"初五"
sStr(v)——将节气序数转换成节气汉字名称,如24为"冬至"
ifgStr(v)——将公历类型数转换成公历类型汉字名称,如0为"儒略历",若-1则弹出"公历历
法去掉了1582年10月5日至10月14日,因而这十天在历史上不存在!"提示窗口
shwStr(v1,v2)——将农历v1日及v2尾数(由lunDate(y,m,d)所得到,若非朔望则v2=0)转换
成"朔"或"望",若非朔望则返回空字符串
ecliStr(v)——将日月食数(由lunDate(y,m,d)所得到)转换成汉字,如2为"月全食",若无
日月食则返回空字符串

代码:

//--------转换成字符串的函数--------//

//将单位天的纯小数转换成如同5:08的时间格式
function dToStr(dv){
var h=floor(dv*24);
var min=floor((dv*24-h)*60);
if(min<10)
min='0'+min;
return h+':'+min;
}

//星期
function dayStr(v){
return '日一二三四五六'.charAt(v%7);
}

//星座
function szodStr(v){
return '摩羯宝瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手'.substring(2*v,2*v+2)
+'座';
}

//干支
function gzStr(v){
return '癸甲乙丙丁戊己庚辛壬'.charAt(v%10)+'亥子丑寅卯辰巳午未申酉戌'.charAt(v
%12);
}

//生肖
function zodStr(v){
return '猪鼠牛虎兔龙蛇马羊猴鸡狗'.charAt(v);
}

//农历月数
function lunMStr(v){
var v0=abs(v);
var str='一二三四五六七八九十';
var vstr=str.charAt((v0-1)%10);
if(v0>10)
vstr='十'+vstr;
if(v0==1)
vstr='正';
if(v<0)
vstr='闰'+vstr;
return vstr;
}

//农历日数
function lunDStr(v){
var str='十一二三四五六七八九初十廿三';
var vstr=str.charAt(floor(v/10)+10)+str.charAt(v%10);
if(v==10)
vstr='初十';
return vstr;
}

//节气
function sStr(v){
return '小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋
分寒露霜降立冬小雪大雪冬至'.substring(2*v-2,2*v);
}

//公历类型
function ifgStr(v){
if(v==-1){
alert('公历历法去掉了1582年10月5日至10月14日,因而这十天在历史上不存在!');
return('不存在');
}
else
return (v)?'格里历':'儒略历';
}

//朔望
function shwStr(v1,v2){
var str='';
if(v1==1)
str=dToStr(v2)+'朔';
else
if(v2)//(v1==15||v1==16)&&v2)
str=dToStr(v2)+'望';
else;
return str;
}

//日月食
function ecliStr(v){
var str='';
if(v==1)
str='日食';
if(v==2)
str='月全食';
if(v==3)
str='月偏食';
return str;
}

--
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
┆怀藏奥妙独一角 网络精华数万家┆
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 210.31.66.30]

(按:以下省略)

V.
其它高精度算法

VSOP87 Functions used to Compute Planetary Positions

http://www.freevbcode.com/ShowCode.Asp?ID=464
http://cosoft.org.cn/html/osl/projects.php?group_id=12522
http://hubble.lamost.org/alg.htm

Monday, November 07, 2005

 

Some notes on Pinyin - 2

1.
from http://blog.csdn.net/cpu88/archive/2004/11/26/195315.aspx

汉字获得拼音(包括多音)得到拼音首字符.查询.排序等的实现
//**********************************************
步骤:
//得到拼音(包括多音)
A: 用输入法生成器(win2000)"C:\Program Files\Windows NT\Accessories\Imegen.exe"
逆转换拼音输入法文件C:\WINNT\SYSTEM32\WINPY.MB
会生成一个C:\WINNT\SYSTEM32\WINPY.txt文件(简称 WINPY.txt文件)
B: WINPY.txt文件里面是 汉字拼音列表5万多条 除去词组 有汉字2万多个(含多音)
C: 汉字可以转换成某中编码可以自己构造编码方法,保证一个汉字对应一个编码 简称编码方法)
如 byte[] uniCode = new String(temp).getBytes(“GB2312“);
将WINPY.txt里面所有的汉字变成编码。得到汉字编码 拼音对应表(简称汉字编码表)
XXXX0,a //XXXX0是某个汉字的编码
XXYX2,o //XXYX2是某个汉字的编码
D: 汉字编码表按编码排序,编码表按编码大小排序。
编码表分组(方便查询 ) 而且得到分组的标志。
E: 查询汉字拼音 将汉字进行编码(按自己的编码方法)。
用编码在编码表中查询就可以得到拼音,查询时在编码表中的某个分组中查询,而不是在所有编码中查询。速度很快。
//得到首字符 如'北京' 得到 'bj' '呆子'得到 'd[a]z ' //多音
//排序 有了拼音 就可以按一些常见的排序方法排序
//************************************************

Sunday, November 06, 2005

 

Some notes on Pinyin - 1

I.
GB2312 (Simplified Chinese) character code table

From http://ash.jp/code/cn/gb2312tbl.htm

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A1A0   、 。 · ˉ ˇ ¨ 〃 々 — ~ ‖ … ‘ ’
A1B0 “ ” 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】
A1C0 ± × ÷ ∶ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠
A1D0 ⌒ ⊙ ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯ ≤ ≥ ∞ ∵
A1E0 ∴ ♂ ♀ ° ′ ″ ℃ $ ¤ ¢ £ ‰ § № ☆ ★
A1F0 ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※ → ← ↑ ↓ 〓

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A2A0 ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ     
A2B0  ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖
A2C0 ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾
A2D0 ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③ ④ ⑤ ⑥ ⑦
A2E0 ⑧ ⑨ ⑩   ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ 
A2F0  Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ  

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A3A0 ! " # ¥ % & ' ( ) * + , - . /
A3B0 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
A3C0 @ A B C D E F G H I J K L M N O
A3D0 P Q R S T U V W X Y Z [ \ ] ^ _
A3E0 ` a b c d e f g h i j k l m n o
A3F0 p q r s t u v w x y z { | }  ̄

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A4A0 ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く
A4B0 ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た
A4C0 だ ち ぢ っ つ づ て で と ど な に ぬ ね の は
A4D0 ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み
A4E0 む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ
A4F0 ゐ ゑ を ん           

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A5A0 ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク
A5B0 グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ
A5C0 ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ
A5D0 バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ
A5E0 ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ
A5F0 ヰ ヱ ヲ ン ヴ ヵ ヶ        

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A6A0 Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο
A6B0 Π Ρ Σ Τ Υ Φ Χ Ψ Ω       
A6C0  α β γ δ ε ζ η θ ι κ λ μ ν ξ ο
A6D0 π ρ σ τ υ φ χ ψ ω       
A6E0 ︵ ︶ ︹ ︺ ︿ ﹀ ︽ ︾ ﹁ ﹂ ﹃ ﹄   ︻ ︼
A6F0 ︷ ︸ ︱  ︳ ︴         

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A7A0 А Б В Г Д Е Ё Ж З И Й К Л М Н
A7B0 О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э
A7C0 Ю Я              
A7D0  а б в г д е ё ж з и й к л м н
A7E0 о п р с т у ф х ц ч ш щ ъ ы ь э
A7F0 ю я             

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A8A0 ā á ǎ à ē é ě è ī í ǐ ì ō ó ǒ
A8B0 ò ū ú ǔ ù ǖ ǘ ǚ ǜ ü ê ɑ  ń ň 
A8C0 ɡ     ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ
A8D0 ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ
A8E0 ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ      
A8F0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A9A0    ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋
A9B0 ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛
A9C0 ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫
A9D0 ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻
A9E0 ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋
A9F0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
AAA0               
AAB0                
AAC0                
AAD0                
AAE0                
AAF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ABA0               
ABB0                
ABC0                
ABD0                
ABE0                
ABF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ACA0               
ACB0                
ACC0                
ACD0                
ACE0                
ACF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ADA0               
ADB0                
ADC0                
ADD0                
ADE0                
ADF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
AEA0               
AEB0                
AEC0                
AED0                
AEE0                
AEF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
AFA0               
AFB0                
AFC0                
AFD0                
AFE0                
AFF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B0A0 啊 阿 埃 挨 哎 唉 哀 皑 癌 蔼 矮 艾 碍 爱 隘
B0B0 鞍 氨 安 俺 按 暗 岸 胺 案 肮 昂 盎 凹 敖 熬 翱
B0C0 袄 傲 奥 懊 澳 芭 捌 扒 叭 吧 笆 八 疤 巴 拔 跋
B0D0 靶 把 耙 坝 霸 罢 爸 白 柏 百 摆 佰 败 拜 稗 斑
B0E0 班 搬 扳 般 颁 板 版 扮 拌 伴 瓣 半 办 绊 邦 帮
B0F0 梆 榜 膀 绑 棒 磅 蚌 镑 傍 谤 苞 胞 包 褒 剥

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B1A0 薄 雹 保 堡 饱 宝 抱 报 暴 豹 鲍 爆 杯 碑 悲
B1B0 卑 北 辈 背 贝 钡 倍 狈 备 惫 焙 被 奔 苯 本 笨
B1C0 崩 绷 甭 泵 蹦 迸 逼 鼻 比 鄙 笔 彼 碧 蓖 蔽 毕
B1D0 毙 毖 币 庇 痹 闭 敝 弊 必 辟 壁 臂 避 陛 鞭 边
B1E0 编 贬 扁 便 变 卞 辨 辩 辫 遍 标 彪 膘 表 鳖 憋
B1F0 别 瘪 彬 斌 濒 滨 宾 摈 兵 冰 柄 丙 秉 饼 炳

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B2A0 病 并 玻 菠 播 拨 钵 波 博 勃 搏 铂 箔 伯 帛
B2B0 舶 脖 膊 渤 泊 驳 捕 卜 哺 补 埠 不 布 步 簿 部
B2C0 怖 擦 猜 裁 材 才 财 睬 踩 采 彩 菜 蔡 餐 参 蚕
B2D0 残 惭 惨 灿 苍 舱 仓 沧 藏 操 糙 槽 曹 草 厕 策
B2E0 侧 册 测 层 蹭 插 叉 茬 茶 查 碴 搽 察 岔 差 诧
B2F0 拆 柴 豺 搀 掺 蝉 馋 谗 缠 铲 产 阐 颤 昌 猖

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B3A0 场 尝 常 长 偿 肠 厂 敞 畅 唱 倡 超 抄 钞 朝
B3B0 嘲 潮 巢 吵 炒 车 扯 撤 掣 彻 澈 郴 臣 辰 尘 晨
B3C0 忱 沉 陈 趁 衬 撑 称 城 橙 成 呈 乘 程 惩 澄 诚
B3D0 承 逞 骋 秤 吃 痴 持 匙 池 迟 弛 驰 耻 齿 侈 尺
B3E0 赤 翅 斥 炽 充 冲 虫 崇 宠 抽 酬 畴 踌 稠 愁 筹
B3F0 仇 绸 瞅 丑 臭 初 出 橱 厨 躇 锄 雏 滁 除 楚

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B4A0 础 储 矗 搐 触 处 揣 川 穿 椽 传 船 喘 串 疮
B4B0 窗 幢 床 闯 创 吹 炊 捶 锤 垂 春 椿 醇 唇 淳 纯
B4C0 蠢 戳 绰 疵 茨 磁 雌 辞 慈 瓷 词 此 刺 赐 次 聪
B4D0 葱 囱 匆 从 丛 凑 粗 醋 簇 促 蹿 篡 窜 摧 崔 催
B4E0 脆 瘁 粹 淬 翠 村 存 寸 磋 撮 搓 措 挫 错 搭 达
B4F0 答 瘩 打 大 呆 歹 傣 戴 带 殆 代 贷 袋 待 逮

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B5A0 怠 耽 担 丹 单 郸 掸 胆 旦 氮 但 惮 淡 诞 弹
B5B0 蛋 当 挡 党 荡 档 刀 捣 蹈 倒 岛 祷 导 到 稻 悼
B5C0 道 盗 德 得 的 蹬 灯 登 等 瞪 凳 邓 堤 低 滴 迪
B5D0 敌 笛 狄 涤 翟 嫡 抵 底 地 蒂 第 帝 弟 递 缔 颠
B5E0 掂 滇 碘 点 典 靛 垫 电 佃 甸 店 惦 奠 淀 殿 碉
B5F0 叼 雕 凋 刁 掉 吊 钓 调 跌 爹 碟 蝶 迭 谍 叠

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B6A0 丁 盯 叮 钉 顶 鼎 锭 定 订 丢 东 冬 董 懂 动
B6B0 栋 侗 恫 冻 洞 兜 抖 斗 陡 豆 逗 痘 都 督 毒 犊
B6C0 独 读 堵 睹 赌 杜 镀 肚 度 渡 妒 端 短 锻 段 断
B6D0 缎 堆 兑 队 对 墩 吨 蹲 敦 顿 囤 钝 盾 遁 掇 哆
B6E0 多 夺 垛 躲 朵 跺 舵 剁 惰 堕 蛾 峨 鹅 俄 额 讹
B6F0 娥 恶 厄 扼 遏 鄂 饿 恩 而 儿 耳 尔 饵 洱 二

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B7A0 贰 发 罚 筏 伐 乏 阀 法 珐 藩 帆 番 翻 樊 矾
B7B0 钒 繁 凡 烦 反 返 范 贩 犯 饭 泛 坊 芳 方 肪 房
B7C0 防 妨 仿 访 纺 放 菲 非 啡 飞 肥 匪 诽 吠 肺 废
B7D0 沸 费 芬 酚 吩 氛 分 纷 坟 焚 汾 粉 奋 份 忿 愤
B7E0 粪 丰 封 枫 蜂 峰 锋 风 疯 烽 逢 冯 缝 讽 奉 凤
B7F0 佛 否 夫 敷 肤 孵 扶 拂 辐 幅 氟 符 伏 俘 服

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B8A0 浮 涪 福 袱 弗 甫 抚 辅 俯 釜 斧 脯 腑 府 腐
B8B0 赴 副 覆 赋 复 傅 付 阜 父 腹 负 富 讣 附 妇 缚
B8C0 咐 噶 嘎 该 改 概 钙 盖 溉 干 甘 杆 柑 竿 肝 赶
B8D0 感 秆 敢 赣 冈 刚 钢 缸 肛 纲 岗 港 杠 篙 皋 高
B8E0 膏 羔 糕 搞 镐 稿 告 哥 歌 搁 戈 鸽 胳 疙 割 革
B8F0 葛 格 蛤 阁 隔 铬 个 各 给 根 跟 耕 更 庚 羹

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B9A0 埂 耿 梗 工 攻 功 恭 龚 供 躬 公 宫 弓 巩 汞
B9B0 拱 贡 共 钩 勾 沟 苟 狗 垢 构 购 够 辜 菇 咕 箍
B9C0 估 沽 孤 姑 鼓 古 蛊 骨 谷 股 故 顾 固 雇 刮 瓜
B9D0 剐 寡 挂 褂 乖 拐 怪 棺 关 官 冠 观 管 馆 罐 惯
B9E0 灌 贯 光 广 逛 瑰 规 圭 硅 归 龟 闺 轨 鬼 诡 癸
B9F0 桂 柜 跪 贵 刽 辊 滚 棍 锅 郭 国 果 裹 过 哈

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BAA0 骸 孩 海 氦 亥 害 骇 酣 憨 邯 韩 含 涵 寒 函
BAB0 喊 罕 翰 撼 捍 旱 憾 悍 焊 汗 汉 夯 杭 航 壕 嚎
BAC0 豪 毫 郝 好 耗 号 浩 呵 喝 荷 菏 核 禾 和 何 合
BAD0 盒 貉 阂 河 涸 赫 褐 鹤 贺 嘿 黑 痕 很 狠 恨 哼
BAE0 亨 横 衡 恒 轰 哄 烘 虹 鸿 洪 宏 弘 红 喉 侯 猴
BAF0 吼 厚 候 后 呼 乎 忽 瑚 壶 葫 胡 蝴 狐 糊 湖

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BBA0 弧 虎 唬 护 互 沪 户 花 哗 华 猾 滑 画 划 化
BBB0 话 槐 徊 怀 淮 坏 欢 环 桓 还 缓 换 患 唤 痪 豢
BBC0 焕 涣 宦 幻 荒 慌 黄 磺 蝗 簧 皇 凰 惶 煌 晃 幌
BBD0 恍 谎 灰 挥 辉 徽 恢 蛔 回 毁 悔 慧 卉 惠 晦 贿
BBE0 秽 会 烩 汇 讳 诲 绘 荤 昏 婚 魂 浑 混 豁 活 伙
BBF0 火 获 或 惑 霍 货 祸 击 圾 基 机 畸 稽 积 箕

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BCA0 肌 饥 迹 激 讥 鸡 姬 绩 缉 吉 极 棘 辑 籍 集
BCB0 及 急 疾 汲 即 嫉 级 挤 几 脊 己 蓟 技 冀 季 伎
BCC0 祭 剂 悸 济 寄 寂 计 记 既 忌 际 妓 继 纪 嘉 枷
BCD0 夹 佳 家 加 荚 颊 贾 甲 钾 假 稼 价 架 驾 嫁 歼
BCE0 监 坚 尖 笺 间 煎 兼 肩 艰 奸 缄 茧 检 柬 碱 硷
BCF0 拣 捡 简 俭 剪 减 荐 槛 鉴 践 贱 见 键 箭 件

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BDA0 健 舰 剑 饯 渐 溅 涧 建 僵 姜 将 浆 江 疆 蒋
BDB0 桨 奖 讲 匠 酱 降 蕉 椒 礁 焦 胶 交 郊 浇 骄 娇
BDC0 嚼 搅 铰 矫 侥 脚 狡 角 饺 缴 绞 剿 教 酵 轿 较
BDD0 叫 窖 揭 接 皆 秸 街 阶 截 劫 节 桔 杰 捷 睫 竭
BDE0 洁 结 解 姐 戒 藉 芥 界 借 介 疥 诫 届 巾 筋 斤
BDF0 金 今 津 襟 紧 锦 仅 谨 进 靳 晋 禁 近 烬 浸

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BEA0 尽 劲 荆 兢 茎 睛 晶 鲸 京 惊 精 粳 经 井 警
BEB0 景 颈 静 境 敬 镜 径 痉 靖 竟 竞 净 炯 窘 揪 究
BEC0 纠 玖 韭 久 灸 九 酒 厩 救 旧 臼 舅 咎 就 疚 鞠
BED0 拘 狙 疽 居 驹 菊 局 咀 矩 举 沮 聚 拒 据 巨 具
BEE0 距 踞 锯 俱 句 惧 炬 剧 捐 鹃 娟 倦 眷 卷 绢 撅
BEF0 攫 抉 掘 倔 爵 觉 决 诀 绝 均 菌 钧 军 君 峻

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
BFA0 俊 竣 浚 郡 骏 喀 咖 卡 咯 开 揩 楷 凯 慨 刊
BFB0 堪 勘 坎 砍 看 康 慷 糠 扛 抗 亢 炕 考 拷 烤 靠
BFC0 坷 苛 柯 棵 磕 颗 科 壳 咳 可 渴 克 刻 客 课 肯
BFD0 啃 垦 恳 坑 吭 空 恐 孔 控 抠 口 扣 寇 枯 哭 窟
BFE0 苦 酷 库 裤 夸 垮 挎 跨 胯 块 筷 侩 快 宽 款 匡
BFF0 筐 狂 框 矿 眶 旷 况 亏 盔 岿 窥 葵 奎 魁 傀

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C0A0 馈 愧 溃 坤 昆 捆 困 括 扩 廓 阔 垃 拉 喇 蜡
C0B0 腊 辣 啦 莱 来 赖 蓝 婪 栏 拦 篮 阑 兰 澜 谰 揽
C0C0 览 懒 缆 烂 滥 琅 榔 狼 廊 郎 朗 浪 捞 劳 牢 老
C0D0 佬 姥 酪 烙 涝 勒 乐 雷 镭 蕾 磊 累 儡 垒 擂 肋
C0E0 类 泪 棱 楞 冷 厘 梨 犁 黎 篱 狸 离 漓 理 李 里
C0F0 鲤 礼 莉 荔 吏 栗 丽 厉 励 砾 历 利 傈 例 俐

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C1A0 痢 立 粒 沥 隶 力 璃 哩 俩 联 莲 连 镰 廉 怜
C1B0 涟 帘 敛 脸 链 恋 炼 练 粮 凉 梁 粱 良 两 辆 量
C1C0 晾 亮 谅 撩 聊 僚 疗 燎 寥 辽 潦 了 撂 镣 廖 料
C1D0 列 裂 烈 劣 猎 琳 林 磷 霖 临 邻 鳞 淋 凛 赁 吝
C1E0 拎 玲 菱 零 龄 铃 伶 羚 凌 灵 陵 岭 领 另 令 溜
C1F0 琉 榴 硫 馏 留 刘 瘤 流 柳 六 龙 聋 咙 笼 窿

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C2A0 隆 垄 拢 陇 楼 娄 搂 篓 漏 陋 芦 卢 颅 庐 炉
C2B0 掳 卤 虏 鲁 麓 碌 露 路 赂 鹿 潞 禄 录 陆 戮 驴
C2C0 吕 铝 侣 旅 履 屡 缕 虑 氯 律 率 滤 绿 峦 挛 孪
C2D0 滦 卵 乱 掠 略 抡 轮 伦 仑 沦 纶 论 萝 螺 罗 逻
C2E0 锣 箩 骡 裸 落 洛 骆 络 妈 麻 玛 码 蚂 马 骂 嘛
C2F0 吗 埋 买 麦 卖 迈 脉 瞒 馒 蛮 满 蔓 曼 慢 漫

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C3A0 谩 芒 茫 盲 氓 忙 莽 猫 茅 锚 毛 矛 铆 卯 茂
C3B0 冒 帽 貌 贸 么 玫 枚 梅 酶 霉 煤 没 眉 媒 镁 每
C3C0 美 昧 寐 妹 媚 门 闷 们 萌 蒙 檬 盟 锰 猛 梦 孟
C3D0 眯 醚 靡 糜 迷 谜 弥 米 秘 觅 泌 蜜 密 幂 棉 眠
C3E0 绵 冕 免 勉 娩 缅 面 苗 描 瞄 藐 秒 渺 庙 妙 蔑
C3F0 灭 民 抿 皿 敏 悯 闽 明 螟 鸣 铭 名 命 谬 摸

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C4A0 摹 蘑 模 膜 磨 摩 魔 抹 末 莫 墨 默 沫 漠 寞
C4B0 陌 谋 牟 某 拇 牡 亩 姆 母 墓 暮 幕 募 慕 木 目
C4C0 睦 牧 穆 拿 哪 呐 钠 那 娜 纳 氖 乃 奶 耐 奈 南
C4D0 男 难 囊 挠 脑 恼 闹 淖 呢 馁 内 嫩 能 妮 霓 倪
C4E0 泥 尼 拟 你 匿 腻 逆 溺 蔫 拈 年 碾 撵 捻 念 娘
C4F0 酿 鸟 尿 捏 聂 孽 啮 镊 镍 涅 您 柠 狞 凝 宁

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C5A0 拧 泞 牛 扭 钮 纽 脓 浓 农 弄 奴 努 怒 女 暖
C5B0 虐 疟 挪 懦 糯 诺 哦 欧 鸥 殴 藕 呕 偶 沤 啪 趴
C5C0 爬 帕 怕 琶 拍 排 牌 徘 湃 派 攀 潘 盘 磐 盼 畔
C5D0 判 叛 乓 庞 旁 耪 胖 抛 咆 刨 炮 袍 跑 泡 呸 胚
C5E0 培 裴 赔 陪 配 佩 沛 喷 盆 砰 抨 烹 澎 彭 蓬 棚
C5F0 硼 篷 膨 朋 鹏 捧 碰 坯 砒 霹 批 披 劈 琵 毗

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C6A0 啤 脾 疲 皮 匹 痞 僻 屁 譬 篇 偏 片 骗 飘 漂
C6B0 瓢 票 撇 瞥 拼 频 贫 品 聘 乒 坪 苹 萍 平 凭 瓶
C6C0 评 屏 坡 泼 颇 婆 破 魄 迫 粕 剖 扑 铺 仆 莆 葡
C6D0 菩 蒲 埔 朴 圃 普 浦 谱 曝 瀑 期 欺 栖 戚 妻 七
C6E0 凄 漆 柒 沏 其 棋 奇 歧 畦 崎 脐 齐 旗 祈 祁 骑
C6F0 起 岂 乞 企 启 契 砌 器 气 迄 弃 汽 泣 讫 掐

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C7A0 恰 洽 牵 扦 钎 铅 千 迁 签 仟 谦 乾 黔 钱 钳
C7B0 前 潜 遣 浅 谴 堑 嵌 欠 歉 枪 呛 腔 羌 墙 蔷 强
C7C0 抢 橇 锹 敲 悄 桥 瞧 乔 侨 巧 鞘 撬 翘 峭 俏 窍
C7D0 切 茄 且 怯 窃 钦 侵 亲 秦 琴 勤 芹 擒 禽 寝 沁
C7E0 青 轻 氢 倾 卿 清 擎 晴 氰 情 顷 请 庆 琼 穷 秋
C7F0 丘 邱 球 求 囚 酋 泅 趋 区 蛆 曲 躯 屈 驱 渠

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C8A0 取 娶 龋 趣 去 圈 颧 权 醛 泉 全 痊 拳 犬 券
C8B0 劝 缺 炔 瘸 却 鹊 榷 确 雀 裙 群 然 燃 冉 染 瓤
C8C0 壤 攘 嚷 让 饶 扰 绕 惹 热 壬 仁 人 忍 韧 任 认
C8D0 刃 妊 纫 扔 仍 日 戎 茸 蓉 荣 融 熔 溶 容 绒 冗
C8E0 揉 柔 肉 茹 蠕 儒 孺 如 辱 乳 汝 入 褥 软 阮 蕊
C8F0 瑞 锐 闰 润 若 弱 撒 洒 萨 腮 鳃 塞 赛 三 叁

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
C9A0 伞 散 桑 嗓 丧 搔 骚 扫 嫂 瑟 色 涩 森 僧 莎
C9B0 砂 杀 刹 沙 纱 傻 啥 煞 筛 晒 珊 苫 杉 山 删 煽
C9C0 衫 闪 陕 擅 赡 膳 善 汕 扇 缮 墒 伤 商 赏 晌 上
C9D0 尚 裳 梢 捎 稍 烧 芍 勺 韶 少 哨 邵 绍 奢 赊 蛇
C9E0 舌 舍 赦 摄 射 慑 涉 社 设 砷 申 呻 伸 身 深 娠
C9F0 绅 神 沈 审 婶 甚 肾 慎 渗 声 生 甥 牲 升 绳

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CAA0 省 盛 剩 胜 圣 师 失 狮 施 湿 诗 尸 虱 十 石
CAB0 拾 时 什 食 蚀 实 识 史 矢 使 屎 驶 始 式 示 士
CAC0 世 柿 事 拭 誓 逝 势 是 嗜 噬 适 仕 侍 释 饰 氏
CAD0 市 恃 室 视 试 收 手 首 守 寿 授 售 受 瘦 兽 蔬
CAE0 枢 梳 殊 抒 输 叔 舒 淑 疏 书 赎 孰 熟 薯 暑 曙
CAF0 署 蜀 黍 鼠 属 术 述 树 束 戍 竖 墅 庶 数 漱

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CBA0 恕 刷 耍 摔 衰 甩 帅 栓 拴 霜 双 爽 谁 水 睡
CBB0 税 吮 瞬 顺 舜 说 硕 朔 烁 斯 撕 嘶 思 私 司 丝
CBC0 死 肆 寺 嗣 四 伺 似 饲 巳 松 耸 怂 颂 送 宋 讼
CBD0 诵 搜 艘 擞 嗽 苏 酥 俗 素 速 粟 僳 塑 溯 宿 诉
CBE0 肃 酸 蒜 算 虽 隋 随 绥 髓 碎 岁 穗 遂 隧 祟 孙
CBF0 损 笋 蓑 梭 唆 缩 琐 索 锁 所 塌 他 它 她 塔

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CCA0 獭 挞 蹋 踏 胎 苔 抬 台 泰 酞 太 态 汰 坍 摊
CCB0 贪 瘫 滩 坛 檀 痰 潭 谭 谈 坦 毯 袒 碳 探 叹 炭
CCC0 汤 塘 搪 堂 棠 膛 唐 糖 倘 躺 淌 趟 烫 掏 涛 滔
CCD0 绦 萄 桃 逃 淘 陶 讨 套 特 藤 腾 疼 誊 梯 剔 踢
CCE0 锑 提 题 蹄 啼 体 替 嚏 惕 涕 剃 屉 天 添 填 田
CCF0 甜 恬 舔 腆 挑 条 迢 眺 跳 贴 铁 帖 厅 听 烃

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CDA0 汀 廷 停 亭 庭 挺 艇 通 桐 酮 瞳 同 铜 彤 童
CDB0 桶 捅 筒 统 痛 偷 投 头 透 凸 秃 突 图 徒 途 涂
CDC0 屠 土 吐 兔 湍 团 推 颓 腿 蜕 褪 退 吞 屯 臀 拖
CDD0 托 脱 鸵 陀 驮 驼 椭 妥 拓 唾 挖 哇 蛙 洼 娃 瓦
CDE0 袜 歪 外 豌 弯 湾 玩 顽 丸 烷 完 碗 挽 晚 皖 惋
CDF0 宛 婉 万 腕 汪 王 亡 枉 网 往 旺 望 忘 妄 威

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CEA0 巍 微 危 韦 违 桅 围 唯 惟 为 潍 维 苇 萎 委
CEB0 伟 伪 尾 纬 未 蔚 味 畏 胃 喂 魏 位 渭 谓 尉 慰
CEC0 卫 瘟 温 蚊 文 闻 纹 吻 稳 紊 问 嗡 翁 瓮 挝 蜗
CED0 涡 窝 我 斡 卧 握 沃 巫 呜 钨 乌 污 诬 屋 无 芜
CEE0 梧 吾 吴 毋 武 五 捂 午 舞 伍 侮 坞 戊 雾 晤 物
CEF0 勿 务 悟 误 昔 熙 析 西 硒 矽 晰 嘻 吸 锡 牺

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
CFA0 稀 息 希 悉 膝 夕 惜 熄 烯 溪 汐 犀 檄 袭 席
CFB0 习 媳 喜 铣 洗 系 隙 戏 细 瞎 虾 匣 霞 辖 暇 峡
CFC0 侠 狭 下 厦 夏 吓 掀 锨 先 仙 鲜 纤 咸 贤 衔 舷
CFD0 闲 涎 弦 嫌 显 险 现 献 县 腺 馅 羡 宪 陷 限 线
CFE0 相 厢 镶 香 箱 襄 湘 乡 翔 祥 详 想 响 享 项 巷
CFF0 橡 像 向 象 萧 硝 霄 削 哮 嚣 销 消 宵 淆 晓

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D0A0 小 孝 校 肖 啸 笑 效 楔 些 歇 蝎 鞋 协 挟 携
D0B0 邪 斜 胁 谐 写 械 卸 蟹 懈 泄 泻 谢 屑 薪 芯 锌
D0C0 欣 辛 新 忻 心 信 衅 星 腥 猩 惺 兴 刑 型 形 邢
D0D0 行 醒 幸 杏 性 姓 兄 凶 胸 匈 汹 雄 熊 休 修 羞
D0E0 朽 嗅 锈 秀 袖 绣 墟 戌 需 虚 嘘 须 徐 许 蓄 酗
D0F0 叙 旭 序 畜 恤 絮 婿 绪 续 轩 喧 宣 悬 旋 玄

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D1A0 选 癣 眩 绚 靴 薛 学 穴 雪 血 勋 熏 循 旬 询
D1B0 寻 驯 巡 殉 汛 训 讯 逊 迅 压 押 鸦 鸭 呀 丫 芽
D1C0 牙 蚜 崖 衙 涯 雅 哑 亚 讶 焉 咽 阉 烟 淹 盐 严
D1D0 研 蜒 岩 延 言 颜 阎 炎 沿 奄 掩 眼 衍 演 艳 堰
D1E0 燕 厌 砚 雁 唁 彦 焰 宴 谚 验 殃 央 鸯 秧 杨 扬
D1F0 佯 疡 羊 洋 阳 氧 仰 痒 养 样 漾 邀 腰 妖 瑶

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D2A0 摇 尧 遥 窑 谣 姚 咬 舀 药 要 耀 椰 噎 耶 爷
D2B0 野 冶 也 页 掖 业 叶 曳 腋 夜 液 一 壹 医 揖 铱
D2C0 依 伊 衣 颐 夷 遗 移 仪 胰 疑 沂 宜 姨 彝 椅 蚁
D2D0 倚 已 乙 矣 以 艺 抑 易 邑 屹 亿 役 臆 逸 肄 疫
D2E0 亦 裔 意 毅 忆 义 益 溢 诣 议 谊 译 异 翼 翌 绎
D2F0 茵 荫 因 殷 音 阴 姻 吟 银 淫 寅 饮 尹 引 隐

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D3A0 印 英 樱 婴 鹰 应 缨 莹 萤 营 荧 蝇 迎 赢 盈
D3B0 影 颖 硬 映 哟 拥 佣 臃 痈 庸 雍 踊 蛹 咏 泳 涌
D3C0 永 恿 勇 用 幽 优 悠 忧 尤 由 邮 铀 犹 油 游 酉
D3D0 有 友 右 佑 釉 诱 又 幼 迂 淤 于 盂 榆 虞 愚 舆
D3E0 余 俞 逾 鱼 愉 渝 渔 隅 予 娱 雨 与 屿 禹 宇 语
D3F0 羽 玉 域 芋 郁 吁 遇 喻 峪 御 愈 欲 狱 育 誉

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D4A0 浴 寓 裕 预 豫 驭 鸳 渊 冤 元 垣 袁 原 援 辕
D4B0 园 员 圆 猿 源 缘 远 苑 愿 怨 院 曰 约 越 跃 钥
D4C0 岳 粤 月 悦 阅 耘 云 郧 匀 陨 允 运 蕴 酝 晕 韵
D4D0 孕 匝 砸 杂 栽 哉 灾 宰 载 再 在 咱 攒 暂 赞 赃
D4E0 脏 葬 遭 糟 凿 藻 枣 早 澡 蚤 躁 噪 造 皂 灶 燥
D4F0 责 择 则 泽 贼 怎 增 憎 曾 赠 扎 喳 渣 札 轧

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D5A0 铡 闸 眨 栅 榨 咋 乍 炸 诈 摘 斋 宅 窄 债 寨
D5B0 瞻 毡 詹 粘 沾 盏 斩 辗 崭 展 蘸 栈 占 战 站 湛
D5C0 绽 樟 章 彰 漳 张 掌 涨 杖 丈 帐 账 仗 胀 瘴 障
D5D0 招 昭 找 沼 赵 照 罩 兆 肇 召 遮 折 哲 蛰 辙 者
D5E0 锗 蔗 这 浙 珍 斟 真 甄 砧 臻 贞 针 侦 枕 疹 诊
D5F0 震 振 镇 阵 蒸 挣 睁 征 狰 争 怔 整 拯 正 政

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D6A0 帧 症 郑 证 芝 枝 支 吱 蜘 知 肢 脂 汁 之 织
D6B0 职 直 植 殖 执 值 侄 址 指 止 趾 只 旨 纸 志 挚
D6C0 掷 至 致 置 帜 峙 制 智 秩 稚 质 炙 痔 滞 治 窒
D6D0 中 盅 忠 钟 衷 终 种 肿 重 仲 众 舟 周 州 洲 诌
D6E0 粥 轴 肘 帚 咒 皱 宙 昼 骤 珠 株 蛛 朱 猪 诸 诛
D6F0 逐 竹 烛 煮 拄 瞩 嘱 主 著 柱 助 蛀 贮 铸 筑

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D7A0 住 注 祝 驻 抓 爪 拽 专 砖 转 撰 赚 篆 桩 庄
D7B0 装 妆 撞 壮 状 椎 锥 追 赘 坠 缀 谆 准 捉 拙 卓
D7C0 桌 琢 茁 酌 啄 着 灼 浊 兹 咨 资 姿 滋 淄 孜 紫
D7D0 仔 籽 滓 子 自 渍 字 鬃 棕 踪 宗 综 总 纵 邹 走
D7E0 奏 揍 租 足 卒 族 祖 诅 阻 组 钻 纂 嘴 醉 最 罪
D7F0 尊 遵 昨 左 佐 柞 做 作 坐 座     

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D8A0 亍 丌 兀 丐 廿 卅 丕 亘 丞 鬲 孬 噩 丨 禺 丿
D8B0 匕 乇 夭 爻 卮 氐 囟 胤 馗 毓 睾 鼗 丶 亟 鼐 乜
D8C0 乩 亓 芈 孛 啬 嘏 仄 厍 厝 厣 厥 厮 靥 赝 匚 叵
D8D0 匦 匮 匾 赜 卦 卣 刂 刈 刎 刭 刳 刿 剀 剌 剞 剡
D8E0 剜 蒯 剽 劂 劁 劐 劓 冂 罔 亻 仃 仉 仂 仨 仡 仫
D8F0 仞 伛 仳 伢 佤 仵 伥 伧 伉 伫 佞 佧 攸 佚 佝

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
D9A0 佟 佗 伲 伽 佶 佴 侑 侉 侃 侏 佾 佻 侪 佼 侬
D9B0 侔 俦 俨 俪 俅 俚 俣 俜 俑 俟 俸 倩 偌 俳 倬 倏
D9C0 倮 倭 俾 倜 倌 倥 倨 偾 偃 偕 偈 偎 偬 偻 傥 傧
D9D0 傩 傺 僖 儆 僭 僬 僦 僮 儇 儋 仝 氽 佘 佥 俎 龠
D9E0 汆 籴 兮 巽 黉 馘 冁 夔 勹 匍 訇 匐 凫 夙 兕 亠
D9F0 兖 亳 衮 袤 亵 脔 裒 禀 嬴 蠃 羸 冫 冱 冽 冼

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DAA0 凇 冖 冢 冥 讠 讦 讧 讪 讴 讵 讷 诂 诃 诋 诏
DAB0 诎 诒 诓 诔 诖 诘 诙 诜 诟 诠 诤 诨 诩 诮 诰 诳
DAC0 诶 诹 诼 诿 谀 谂 谄 谇 谌 谏 谑 谒 谔 谕 谖 谙
DAD0 谛 谘 谝 谟 谠 谡 谥 谧 谪 谫 谮 谯 谲 谳 谵 谶
DAE0 卩 卺 阝 阢 阡 阱 阪 阽 阼 陂 陉 陔 陟 陧 陬 陲
DAF0 陴 隈 隍 隗 隰 邗 邛 邝 邙 邬 邡 邴 邳 邶 邺

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DBA0 邸 邰 郏 郅 邾 郐 郄 郇 郓 郦 郢 郜 郗 郛 郫
DBB0 郯 郾 鄄 鄢 鄞 鄣 鄱 鄯 鄹 酃 酆 刍 奂 劢 劬 劭
DBC0 劾 哿 勐 勖 勰 叟 燮 矍 廴 凵 凼 鬯 厶 弁 畚 巯
DBD0 坌 垩 垡 塾 墼 壅 壑 圩 圬 圪 圳 圹 圮 圯 坜 圻
DBE0 坂 坩 垅 坫 垆 坼 坻 坨 坭 坶 坳 垭 垤 垌 垲 埏
DBF0 垧 垴 垓 垠 埕 埘 埚 埙 埒 垸 埴 埯 埸 埤 埝

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DCA0 堋 堍 埽 埭 堀 堞 堙 塄 堠 塥 塬 墁 墉 墚 墀
DCB0 馨 鼙 懿 艹 艽 艿 芏 芊 芨 芄 芎 芑 芗 芙 芫 芸
DCC0 芾 芰 苈 苊 苣 芘 芷 芮 苋 苌 苁 芩 芴 芡 芪 芟
DCD0 苄 苎 芤 苡 茉 苷 苤 茏 茇 苜 苴 苒 苘 茌 苻 苓
DCE0 茑 茚 茆 茔 茕 苠 苕 茜 荑 荛 荜 茈 莒 茼 茴 茱
DCF0 莛 荞 茯 荏 荇 荃 荟 荀 茗 荠 茭 茺 茳 荦 荥

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DDA0 荨 茛 荩 荬 荪 荭 荮 莰 荸 莳 莴 莠 莪 莓 莜
DDB0 莅 荼 莶 莩 荽 莸 荻 莘 莞 莨 莺 莼 菁 萁 菥 菘
DDC0 堇 萘 萋 菝 菽 菖 萜 萸 萑 萆 菔 菟 萏 萃 菸 菹
DDD0 菪 菅 菀 萦 菰 菡 葜 葑 葚 葙 葳 蒇 蒈 葺 蒉 葸
DDE0 萼 葆 葩 葶 蒌 蒎 萱 葭 蓁 蓍 蓐 蓦 蒽 蓓 蓊 蒿
DDF0 蒺 蓠 蒡 蒹 蒴 蒗 蓥 蓣 蔌 甍 蔸 蓰 蔹 蔟 蔺

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DEA0 蕖 蔻 蓿 蓼 蕙 蕈 蕨 蕤 蕞 蕺 瞢 蕃 蕲 蕻 薤
DEB0 薨 薇 薏 蕹 薮 薜 薅 薹 薷 薰 藓 藁 藜 藿 蘧 蘅
DEC0 蘩 蘖 蘼 廾 弈 夼 奁 耷 奕 奚 奘 匏 尢 尥 尬 尴
DED0 扌 扪 抟 抻 拊 拚 拗 拮 挢 拶 挹 捋 捃 掭 揶 捱
DEE0 捺 掎 掴 捭 掬 掊 捩 掮 掼 揲 揸 揠 揿 揄 揞 揎
DEF0 摒 揆 掾 摅 摁 搋 搛 搠 搌 搦 搡 摞 撄 摭 撖

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
DFA0 摺 撷 撸 撙 撺 擀 擐 擗 擤 擢 攉 攥 攮 弋 忒
DFB0 甙 弑 卟 叱 叽 叩 叨 叻 吒 吖 吆 呋 呒 呓 呔 呖
DFC0 呃 吡 呗 呙 吣 吲 咂 咔 呷 呱 呤 咚 咛 咄 呶 呦
DFD0 咝 哐 咭 哂 咴 哒 咧 咦 哓 哔 呲 咣 哕 咻 咿 哌
DFE0 哙 哚 哜 咩 咪 咤 哝 哏 哞 唛 哧 唠 哽 唔 哳 唢
DFF0 唣 唏 唑 唧 唪 啧 喏 喵 啉 啭 啁 啕 唿 啐 唼

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E0A0 唷 啖 啵 啶 啷 唳 唰 啜 喋 嗒 喃 喱 喹 喈 喁
E0B0 喟 啾 嗖 喑 啻 嗟 喽 喾 喔 喙 嗪 嗷 嗉 嘟 嗑 嗫
E0C0 嗬 嗔 嗦 嗝 嗄 嗯 嗥 嗲 嗳 嗌 嗍 嗨 嗵 嗤 辔 嘞
E0D0 嘈 嘌 嘁 嘤 嘣 嗾 嘀 嘧 嘭 噘 嘹 噗 嘬 噍 噢 噙
E0E0 噜 噌 噔 嚆 噤 噱 噫 噻 噼 嚅 嚓 嚯 囔 囗 囝 囡
E0F0 囵 囫 囹 囿 圄 圊 圉 圜 帏 帙 帔 帑 帱 帻 帼

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E1A0 帷 幄 幔 幛 幞 幡 岌 屺 岍 岐 岖 岈 岘 岙 岑
E1B0 岚 岜 岵 岢 岽 岬 岫 岱 岣 峁 岷 峄 峒 峤 峋 峥
E1C0 崂 崃 崧 崦 崮 崤 崞 崆 崛 嵘 崾 崴 崽 嵬 嵛 嵯
E1D0 嵝 嵫 嵋 嵊 嵩 嵴 嶂 嶙 嶝 豳 嶷 巅 彳 彷 徂 徇
E1E0 徉 後 徕 徙 徜 徨 徭 徵 徼 衢 彡 犭 犰 犴 犷 犸
E1F0 狃 狁 狎 狍 狒 狨 狯 狩 狲 狴 狷 猁 狳 猃 狺

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E2A0 狻 猗 猓 猡 猊 猞 猝 猕 猢 猹 猥 猬 猸 猱 獐
E2B0 獍 獗 獠 獬 獯 獾 舛 夥 飧 夤 夂 饣 饧 饨 饩 饪
E2C0 饫 饬 饴 饷 饽 馀 馄 馇 馊 馍 馐 馑 馓 馔 馕 庀
E2D0 庑 庋 庖 庥 庠 庹 庵 庾 庳 赓 廒 廑 廛 廨 廪 膺
E2E0 忄 忉 忖 忏 怃 忮 怄 忡 忤 忾 怅 怆 忪 忭 忸 怙
E2F0 怵 怦 怛 怏 怍 怩 怫 怊 怿 怡 恸 恹 恻 恺 恂

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E3A0 恪 恽 悖 悚 悭 悝 悃 悒 悌 悛 惬 悻 悱 惝 惘
E3B0 惆 惚 悴 愠 愦 愕 愣 惴 愀 愎 愫 慊 慵 憬 憔 憧
E3C0 憷 懔 懵 忝 隳 闩 闫 闱 闳 闵 闶 闼 闾 阃 阄 阆
E3D0 阈 阊 阋 阌 阍 阏 阒 阕 阖 阗 阙 阚 丬 爿 戕 氵
E3E0 汔 汜 汊 沣 沅 沐 沔 沌 汨 汩 汴 汶 沆 沩 泐 泔
E3F0 沭 泷 泸 泱 泗 沲 泠 泖 泺 泫 泮 沱 泓 泯 泾

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E4A0 洹 洧 洌 浃 浈 洇 洄 洙 洎 洫 浍 洮 洵 洚 浏
E4B0 浒 浔 洳 涑 浯 涞 涠 浞 涓 涔 浜 浠 浼 浣 渚 淇
E4C0 淅 淞 渎 涿 淠 渑 淦 淝 淙 渖 涫 渌 涮 渫 湮 湎
E4D0 湫 溲 湟 溆 湓 湔 渲 渥 湄 滟 溱 溘 滠 漭 滢 溥
E4E0 溧 溽 溻 溷 滗 溴 滏 溏 滂 溟 潢 潆 潇 漤 漕 滹
E4F0 漯 漶 潋 潴 漪 漉 漩 澉 澍 澌 潸 潲 潼 潺 濑

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E5A0 濉 澧 澹 澶 濂 濡 濮 濞 濠 濯 瀚 瀣 瀛 瀹 瀵
E5B0 灏 灞 宀 宄 宕 宓 宥 宸 甯 骞 搴 寤 寮 褰 寰 蹇
E5C0 謇 辶 迓 迕 迥 迮 迤 迩 迦 迳 迨 逅 逄 逋 逦 逑
E5D0 逍 逖 逡 逵 逶 逭 逯 遄 遑 遒 遐 遨 遘 遢 遛 暹
E5E0 遴 遽 邂 邈 邃 邋 彐 彗 彖 彘 尻 咫 屐 屙 孱 屣
E5F0 屦 羼 弪 弩 弭 艴 弼 鬻 屮 妁 妃 妍 妩 妪 妣

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E6A0 妗 姊 妫 妞 妤 姒 妲 妯 姗 妾 娅 娆 姝 娈 姣
E6B0 姘 姹 娌 娉 娲 娴 娑 娣 娓 婀 婧 婊 婕 娼 婢 婵
E6C0 胬 媪 媛 婷 婺 媾 嫫 媲 嫒 嫔 媸 嫠 嫣 嫱 嫖 嫦
E6D0 嫘 嫜 嬉 嬗 嬖 嬲 嬷 孀 尕 尜 孚 孥 孳 孑 孓 孢
E6E0 驵 驷 驸 驺 驿 驽 骀 骁 骅 骈 骊 骐 骒 骓 骖 骘
E6F0 骛 骜 骝 骟 骠 骢 骣 骥 骧 纟 纡 纣 纥 纨 纩

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E7A0 纭 纰 纾 绀 绁 绂 绉 绋 绌 绐 绔 绗 绛 绠 绡
E7B0 绨 绫 绮 绯 绱 绲 缍 绶 绺 绻 绾 缁 缂 缃 缇 缈
E7C0 缋 缌 缏 缑 缒 缗 缙 缜 缛 缟 缡 缢 缣 缤 缥 缦
E7D0 缧 缪 缫 缬 缭 缯 缰 缱 缲 缳 缵 幺 畿 巛 甾 邕
E7E0 玎 玑 玮 玢 玟 珏 珂 珑 玷 玳 珀 珉 珈 珥 珙 顼
E7F0 琊 珩 珧 珞 玺 珲 琏 琪 瑛 琦 琥 琨 琰 琮 琬

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E8A0 琛 琚 瑁 瑜 瑗 瑕 瑙 瑷 瑭 瑾 璜 璎 璀 璁 璇
E8B0 璋 璞 璨 璩 璐 璧 瓒 璺 韪 韫 韬 杌 杓 杞 杈 杩
E8C0 枥 枇 杪 杳 枘 枧 杵 枨 枞 枭 枋 杷 杼 柰 栉 柘
E8D0 栊 柩 枰 栌 柙 枵 柚 枳 柝 栀 柃 枸 柢 栎 柁 柽
E8E0 栲 栳 桠 桡 桎 桢 桄 桤 梃 栝 桕 桦 桁 桧 桀 栾
E8F0 桊 桉 栩 梵 梏 桴 桷 梓 桫 棂 楮 棼 椟 椠 棹

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
E9A0 椤 棰 椋 椁 楗 棣 椐 楱 椹 楠 楂 楝 榄 楫 榀
E9B0 榘 楸 椴 槌 榇 榈 槎 榉 楦 楣 楹 榛 榧 榻 榫 榭
E9C0 槔 榱 槁 槊 槟 榕 槠 榍 槿 樯 槭 樗 樘 橥 槲 橄
E9D0 樾 檠 橐 橛 樵 檎 橹 樽 樨 橘 橼 檑 檐 檩 檗 檫
E9E0 猷 獒 殁 殂 殇 殄 殒 殓 殍 殚 殛 殡 殪 轫 轭 轱
E9F0 轲 轳 轵 轶 轸 轷 轹 轺 轼 轾 辁 辂 辄 辇 辋

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
EAA0 辍 辎 辏 辘 辚 軎 戋 戗 戛 戟 戢 戡 戥 戤 戬
EAB0 臧 瓯 瓴 瓿 甏 甑 甓 攴 旮 旯 旰 昊 昙 杲 昃 昕
EAC0 昀 炅 曷 昝 昴 昱 昶 昵 耆 晟 晔 晁 晏 晖 晡 晗
EAD0 晷 暄 暌 暧 暝 暾 曛 曜 曦 曩 贲 贳 贶 贻 贽 赀
EAE0 赅 赆 赈 赉 赇 赍 赕 赙 觇 觊 觋 觌 觎 觏 觐 觑
EAF0 牮 犟 牝 牦 牯 牾 牿 犄 犋 犍 犏 犒 挈 挲 掰

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
EBA0 搿 擘 耄 毪 毳 毽 毵 毹 氅 氇 氆 氍 氕 氘 氙
EBB0 氚 氡 氩 氤 氪 氲 攵 敕 敫 牍 牒 牖 爰 虢 刖 肟
EBC0 肜 肓 肼 朊 肽 肱 肫 肭 肴 肷 胧 胨 胩 胪 胛 胂
EBD0 胄 胙 胍 胗 朐 胝 胫 胱 胴 胭 脍 脎 胲 胼 朕 脒
EBE0 豚 脶 脞 脬 脘 脲 腈 腌 腓 腴 腙 腚 腱 腠 腩 腼
EBF0 腽 腭 腧 塍 媵 膈 膂 膑 滕 膣 膪 臌 朦 臊 膻

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ECA0 臁 膦 欤 欷 欹 歃 歆 歙 飑 飒 飓 飕 飙 飚 殳
ECB0 彀 毂 觳 斐 齑 斓 於 旆 旄 旃 旌 旎 旒 旖 炀 炜
ECC0 炖 炝 炻 烀 炷 炫 炱 烨 烊 焐 焓 焖 焯 焱 煳 煜
ECD0 煨 煅 煲 煊 煸 煺 熘 熳 熵 熨 熠 燠 燔 燧 燹 爝
ECE0 爨 灬 焘 煦 熹 戾 戽 扃 扈 扉 礻 祀 祆 祉 祛 祜
ECF0 祓 祚 祢 祗 祠 祯 祧 祺 禅 禊 禚 禧 禳 忑 忐

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
EDA0 怼 恝 恚 恧 恁 恙 恣 悫 愆 愍 慝 憩 憝 懋 懑
EDB0 戆 肀 聿 沓 泶 淼 矶 矸 砀 砉 砗 砘 砑 斫 砭 砜
EDC0 砝 砹 砺 砻 砟 砼 砥 砬 砣 砩 硎 硭 硖 硗 砦 硐
EDD0 硇 硌 硪 碛 碓 碚 碇 碜 碡 碣 碲 碹 碥 磔 磙 磉
EDE0 磬 磲 礅 磴 礓 礤 礞 礴 龛 黹 黻 黼 盱 眄 眍 盹
EDF0 眇 眈 眚 眢 眙 眭 眦 眵 眸 睐 睑 睇 睃 睚 睨

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
EEA0 睢 睥 睿 瞍 睽 瞀 瞌 瞑 瞟 瞠 瞰 瞵 瞽 町 畀
EEB0 畎 畋 畈 畛 畲 畹 疃 罘 罡 罟 詈 罨 罴 罱 罹 羁
EEC0 罾 盍 盥 蠲 钅 钆 钇 钋 钊 钌 钍 钏 钐 钔 钗 钕
EED0 钚 钛 钜 钣 钤 钫 钪 钭 钬 钯 钰 钲 钴 钶 钷 钸
EEE0 钹 钺 钼 钽 钿 铄 铈 铉 铊 铋 铌 铍 铎 铐 铑 铒
EEF0 铕 铖 铗 铙 铘 铛 铞 铟 铠 铢 铤 铥 铧 铨 铪

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
EFA0 铩 铫 铮 铯 铳 铴 铵 铷 铹 铼 铽 铿 锃 锂 锆
EFB0 锇 锉 锊 锍 锎 锏 锒 锓 锔 锕 锖 锘 锛 锝 锞 锟
EFC0 锢 锪 锫 锩 锬 锱 锲 锴 锶 锷 锸 锼 锾 锿 镂 锵
EFD0 镄 镅 镆 镉 镌 镎 镏 镒 镓 镔 镖 镗 镘 镙 镛 镞
EFE0 镟 镝 镡 镢 镤 镥 镦 镧 镨 镩 镪 镫 镬 镯 镱 镲
EFF0 镳 锺 矧 矬 雉 秕 秭 秣 秫 稆 嵇 稃 稂 稞 稔

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F0A0 稹 稷 穑 黏 馥 穰 皈 皎 皓 皙 皤 瓞 瓠 甬 鸠
F0B0 鸢 鸨 鸩 鸪 鸫 鸬 鸲 鸱 鸶 鸸 鸷 鸹 鸺 鸾 鹁 鹂
F0C0 鹄 鹆 鹇 鹈 鹉 鹋 鹌 鹎 鹑 鹕 鹗 鹚 鹛 鹜 鹞 鹣
F0D0 鹦 鹧 鹨 鹩 鹪 鹫 鹬 鹱 鹭 鹳 疒 疔 疖 疠 疝 疬
F0E0 疣 疳 疴 疸 痄 疱 疰 痃 痂 痖 痍 痣 痨 痦 痤 痫
F0F0 痧 瘃 痱 痼 痿 瘐 瘀 瘅 瘌 瘗 瘊 瘥 瘘 瘕 瘙

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F1A0 瘛 瘼 瘢 瘠 癀 瘭 瘰 瘿 瘵 癃 瘾 瘳 癍 癞 癔
F1B0 癜 癖 癫 癯 翊 竦 穸 穹 窀 窆 窈 窕 窦 窠 窬 窨
F1C0 窭 窳 衤 衩 衲 衽 衿 袂 袢 裆 袷 袼 裉 裢 裎 裣
F1D0 裥 裱 褚 裼 裨 裾 裰 褡 褙 褓 褛 褊 褴 褫 褶 襁
F1E0 襦 襻 疋 胥 皲 皴 矜 耒 耔 耖 耜 耠 耢 耥 耦 耧
F1F0 耩 耨 耱 耋 耵 聃 聆 聍 聒 聩 聱 覃 顸 颀 颃

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F2A0 颉 颌 颍 颏 颔 颚 颛 颞 颟 颡 颢 颥 颦 虍 虔
F2B0 虬 虮 虿 虺 虼 虻 蚨 蚍 蚋 蚬 蚝 蚧 蚣 蚪 蚓 蚩
F2C0 蚶 蛄 蚵 蛎 蚰 蚺 蚱 蚯 蛉 蛏 蚴 蛩 蛱 蛲 蛭 蛳
F2D0 蛐 蜓 蛞 蛴 蛟 蛘 蛑 蜃 蜇 蛸 蜈 蜊 蜍 蜉 蜣 蜻
F2E0 蜞 蜥 蜮 蜚 蜾 蝈 蜴 蜱 蜩 蜷 蜿 螂 蜢 蝽 蝾 蝻
F2F0 蝠 蝰 蝌 蝮 螋 蝓 蝣 蝼 蝤 蝙 蝥 螓 螯 螨 蟒

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F3A0 蟆 螈 螅 螭 螗 螃 螫 蟥 螬 螵 螳 蟋 蟓 螽 蟑
F3B0 蟀 蟊 蟛 蟪 蟠 蟮 蠖 蠓 蟾 蠊 蠛 蠡 蠹 蠼 缶 罂
F3C0 罄 罅 舐 竺 竽 笈 笃 笄 笕 笊 笫 笏 筇 笸 笪 笙
F3D0 笮 笱 笠 笥 笤 笳 笾 笞 筘 筚 筅 筵 筌 筝 筠 筮
F3E0 筻 筢 筲 筱 箐 箦 箧 箸 箬 箝 箨 箅 箪 箜 箢 箫
F3F0 箴 篑 篁 篌 篝 篚 篥 篦 篪 簌 篾 篼 簏 簖 簋

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F4A0 簟 簪 簦 簸 籁 籀 臾 舁 舂 舄 臬 衄 舡 舢 舣
F4B0 舭 舯 舨 舫 舸 舻 舳 舴 舾 艄 艉 艋 艏 艚 艟 艨
F4C0 衾 袅 袈 裘 裟 襞 羝 羟 羧 羯 羰 羲 籼 敉 粑 粝
F4D0 粜 粞 粢 粲 粼 粽 糁 糇 糌 糍 糈 糅 糗 糨 艮 暨
F4E0 羿 翎 翕 翥 翡 翦 翩 翮 翳 糸 絷 綦 綮 繇 纛 麸
F4F0 麴 赳 趄 趔 趑 趱 赧 赭 豇 豉 酊 酐 酎 酏 酤

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F5A0 酢 酡 酰 酩 酯 酽 酾 酲 酴 酹 醌 醅 醐 醍 醑
F5B0 醢 醣 醪 醭 醮 醯 醵 醴 醺 豕 鹾 趸 跫 踅 蹙 蹩
F5C0 趵 趿 趼 趺 跄 跖 跗 跚 跞 跎 跏 跛 跆 跬 跷 跸
F5D0 跣 跹 跻 跤 踉 跽 踔 踝 踟 踬 踮 踣 踯 踺 蹀 踹
F5E0 踵 踽 踱 蹉 蹁 蹂 蹑 蹒 蹊 蹰 蹶 蹼 蹯 蹴 躅 躏
F5F0 躔 躐 躜 躞 豸 貂 貊 貅 貘 貔 斛 觖 觞 觚 觜

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F6A0 觥 觫 觯 訾 謦 靓 雩 雳 雯 霆 霁 霈 霏 霎 霪
F6B0 霭 霰 霾 龀 龃 龅 龆 龇 龈 龉 龊 龌 黾 鼋 鼍 隹
F6C0 隼 隽 雎 雒 瞿 雠 銎 銮 鋈 錾 鍪 鏊 鎏 鐾 鑫 鱿
F6D0 鲂 鲅 鲆 鲇 鲈 稣 鲋 鲎 鲐 鲑 鲒 鲔 鲕 鲚 鲛 鲞
F6E0 鲟 鲠 鲡 鲢 鲣 鲥 鲦 鲧 鲨 鲩 鲫 鲭 鲮 鲰 鲱 鲲
F6F0 鲳 鲴 鲵 鲶 鲷 鲺 鲻 鲼 鲽 鳄 鳅 鳆 鳇 鳊 鳋

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F7A0 鳌 鳍 鳎 鳏 鳐 鳓 鳔 鳕 鳗 鳘 鳙 鳜 鳝 鳟 鳢
F7B0 靼 鞅 鞑 鞒 鞔 鞯 鞫 鞣 鞲 鞴 骱 骰 骷 鹘 骶 骺
F7C0 骼 髁 髀 髅 髂 髋 髌 髑 魅 魃 魇 魉 魈 魍 魑 飨
F7D0 餍 餮 饕 饔 髟 髡 髦 髯 髫 髻 髭 髹 鬈 鬏 鬓 鬟
F7E0 鬣 麽 麾 縻 麂 麇 麈 麋 麒 鏖 麝 麟 黛 黜 黝 黠
F7F0 黟 黢 黩 黧 黥 黪 黯 鼢 鼬 鼯 鼹 鼷 鼽 鼾 齄

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F8A0               
F8B0                
F8C0                
F8D0                
F8E0                
F8F0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F9A0               
F9B0                
F9C0                
F9D0                
F9E0                
F9F0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
FAA0               
FAB0                
FAC0                
FAD0                
FAE0                
FAF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
FBA0               
FBB0                
FBC0                
FBD0                
FBE0                
FBF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
FCA0               
FCB0                
FCC0                
FCD0                
FCE0                
FCF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
FDA0               
FDB0                
FDC0                
FDD0                
FDE0                
FDF0               

code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
FEA0               
FEB0                
FEC0                
FED0                
FEE0                
FEF0               

II.
中文转换为完整拼音算法原理分析

By tonyqus
From http://www.cnblogs.com/tonyqus/archive/2005/10/22/260000.html

最近由于项目需要,对简体中文转拼音的算法作了一些了解,然而在google找到的大多是获得简体中文拼音首字母的算法,好不容易让我找到了一个sunrise.spell的类,专门用于中文转完整拼音,觉得的确做得不错,于是对它的算法作了一些分析,总的来说觉得还是比较简单的,拿出来与大家分享。

我们先来学习一些准备知识。GB2312编码对于我们中国人是再熟悉不过了,我先简单的分析一下它的编码规则。GB2312编码包括符号、数字、字母、日文、制表符等,当然最主要的部分还是中文,它采用16位编码方式,简体中文的编码范围从B0A1一直到F7FE,完整编码表可以参考http://ash.jp/code/cn/gb2312tbl.htm。如果我们把该编码的每8位用十进制来表示就是[176 | 161]到[247 | 254],这样对于每个中文字符,我们都可以通过两个值来表示它,如“啊”就是[176 | 161],“我”则是[206 | 210]。

通过上面的方法,我们就可以通过一个二维坐标对每一个中文字进行定位,从而建立一个二维表来实现中文和拼音的对应关系。当然我们会忽略一些特殊情况,比如汉字的多音字问题。由于一个拼音可能对应多个汉字,而拼音的组合本来就不多,因此我们首先建立一个拼音音节表,代码如下,里面列出了所有可能的组合情况,该表是一维数组。



readonly static string[] _spellMusicCode = new string[]{
"a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao",
"bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo",
"bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai",
"chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu",
"chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu",
"cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de",
"deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du",
"duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang",
"fei", "fen", "feng", "fu", "fou", "ga", "gai", "gan", "gang", "gao",
"ge", "ji", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan",
"guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he",
"hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang",
"hui", "hun", "huo", "jia", "jian", "jiang", "qiao", "jiao", "jie", "jin",
"jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan",
"kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai",
"kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao",
"le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin",
"ling", "liu", "long", "lou", "lu", "luan", "lue", "lun", "luo", "ma",
"mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian",
"miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai",
"nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang",
"niao", "nie", "nin", "ning", "niu", "nong", "nu", "nuan", "nue", "yao",
"nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen",
"peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu",
"qi", "qia", "qian", "qiang", "qie", "qin", "qing", "qiong", "qiu", "qu",
"quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri",
"rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san",
"sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao",
"she", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang",
"shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun",
"suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian",
"tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo",
"wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi",
"xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu",
"xuan", "xue", "xun", "ya", "yan", "yang", "ye", "yi", "yin", "ying",
"yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan",
"zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang",
"zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai",
"zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan",
"zui", "zun", "zuo", "", "ei", "m", "n", "dia", "cen", "nou",
"jv", "qv", "xv", "lv", "nv"
};
在上面提到的二维表中,我们会保存音节表的索引值,来对应一个音节组合,如bao,而不是直接把音节组合保存在二维数组中,这样可以有效减少内存消耗。因此,二位数组中的所有值都应该是索引值,如数组元素[176][161]对应的应该是a的索引值0。值得注意的是由于GB2312对应的字符量比较大,而且半角字符不需要做转换,sunrise的类把其中的半角部分全部省略掉了,因此它的实际值是从[129 | 64]开始的,即8140开始的。
至此,我已经把原理解释了一遍,可能不是很容易理解,下面我们来举个例子说明一下程序流程。

首先输入汉字“我”,首先程序初始化一个GB2312编码对象

System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("GB2312");

然后通过该对象获得“我”的编码数组

byte[] local = encoding.GetBytes(“我”);

local中的值应该是local[0]=206; local[1]=210

假设我们的二维数组叫_spellCodeIndex那么我们就通过_spellCodeIndex[local[0]-129,local[1]-64]获得“我”对应的拼音音节索引值,即327

再查音节组合表,得索引327对应的是"wo",这样就完成了中文到拼音的转换

(按:该文对多音字问题未考虑,一般要建词组搭配库处理)

III.
一个比较恐怖的Javascript解决方案

来源不详

dim array(1303)
array(0)="a1:阿啊呵腌吖锕"
array(1)="a2:啊呵嗄"
array(2)="a3:啊呵"
array(3)="a4:啊呵"
array(4)="a5:阿啊呵"
array(5)="ai1:哀挨埃唉哎捱锿"
array(6)="ai2:呆挨癌皑捱"
array(7)="ai3:矮哎蔼霭嗳"
array(8)="ai4:爱碍艾唉哎隘暧嗳瑷嗌嫒砹"
array(9)="an1:安谙鞍氨庵桉鹌广厂"
array(10)="an3:俺铵揞埯"
array(11)="an4:案按暗岸黯胺犴"
array(12)="ang1:肮"
array(13)="ang2:昂"
array(14)="ang4:盎"
array(15)="ao1:熬凹"
array(16)="ao2:熬敖嚣嗷鏖鳌翱獒聱螯廒遨"
array(17)="ao3:袄拗媪"
array(18)="ao4:奥澳傲懊坳拗骜岙鏊"
array(19)="ba1:八吧巴叭芭扒疤笆粑岜捌"
array(20)="ba2:八拔跋茇菝魃"
array(21)="ba3:把靶钯"
array(22)="ba4:把爸罢霸坝耙灞鲅"
array(23)="ba5:吧罢"
array(24)="bai1:掰"
array(25)="bai2:白"
array(26)="bai3:百摆伯柏佰捭"
array(27)="bai4:败拜呗稗"
array(28)="ban1:般班搬斑颁扳瘢癍"
array(29)="ban3:版板阪坂钣舨"
array(30)="ban4:办半伴扮瓣拌绊"
array(31)="bang1:帮邦浜梆"
array(32)="bang3:膀榜绑"
array(33)="bang4:棒膀傍磅谤镑蚌蒡"
array(34)="bao1:包胞炮剥褒苞孢煲龅"
array(35)="bao2:薄雹"
array(36)="bao3:保宝饱堡葆褓鸨"
array(37)="bao4:报暴抱爆鲍曝刨瀑豹趵"
array(38)="bei1:背悲杯碑卑陂埤萆鹎"
array(39)="bei3:北"
array(40)="bei4:被备背辈倍贝蓓惫悖狈焙邶钡孛碚褙鐾鞴"
array(41)="bei5:臂呗"
array(42)="ben1:奔贲锛"
array(43)="ben3:本苯畚"
array(44)="ben4:奔笨夯坌"
array(45)="beng1:崩绷嘣"
array(46)="beng2:甭"
array(47)="beng3:绷"
array(48)="beng4:绷蹦迸甏泵蚌"
array(49)="bi1:逼"
array(50)="bi2:鼻荸"
array(51)="bi3:比笔彼鄙匕俾*吡秕舭"
array(52)="bi4:必毕币秘避闭壁臂弊辟碧拂毙蔽庇璧敝泌陛弼篦婢愎痹铋裨濞髀庳毖滗蓖埤芘嬖荜贲畀萆薜筚箅哔襞跸狴"
array(53)="bian1:编边鞭砭煸蝙笾鳊"
array(54)="bian3:贬扁匾碥窆褊"
array(55)="bian4:便变遍辩辨辫卞苄汴忭弁缏"
array(56)="bian5:边"
array(57)="biao1:标彪勺镖膘骠镳杓飚飑飙瘭髟"
array(58)="biao3:表裱*"
array(59)="biao4:鳔"
array(60)="bie1:憋瘪鳖"
array(61)="bie2:别蹩"
array(62)="bie3:瘪"
array(63)="bie4:别"
array(64)="bin1:宾滨彬斌缤濒槟傧玢豳镔"
array(65)="bin4:鬓殡摈膑髌"
array(66)="bing1:并兵冰槟"
array(67)="bing3:饼屏丙柄秉炳禀邴"
array(68)="bing4:并病摒"
array(69)="bo1:般波播拨剥玻饽菠钵趵"
array(70)="bo2:百博伯勃薄泊柏驳魄脖搏膊舶礴帛铂箔渤钹孛亳鹁踣"
array(71)="bo3:簸跛"
array(72)="bo4:薄柏簸掰擘檗"
array(73)="bo5:卜啵"
array(74)="bu1:逋晡钸"
array(75)="bu2:不醭"
array(76)="bu3:补捕堡卜哺卟"
array(77)="bu4:不部布步怖簿埔埠瓿钚"
array(78)="ca1:擦拆嚓"
array(79)="ca3:礤"
array(80)="cai1:猜"
array(81)="cai2:才财材裁"
array(82)="cai3:采彩踩睬"
array(83)="cai4:采菜蔡"
array(84)="can1:参餐骖"
array(85)="can2:残惭蚕"
array(86)="can3:惨黪"
array(87)="can4:惨灿掺璨孱粲"
array(88)="cang1:苍仓沧舱伧"
array(89)="cang2:藏"
array(90)="cao1:操糙"
array(91)="cao2:曹槽嘈漕螬艚"
array(92)="cao3:草"
array(93)="ce4:策测侧厕册恻"
array(94)="cen1:参"
array(95)="cen2:岑涔"
array(96)="ceng1:噌"
array(97)="ceng2:曾层"
array(98)="ceng4:蹭"
array(99)="cha1:差插*碴喳嚓杈馇锸"
array(100)="cha2:查察茶*茬碴楂猹搽槎檫"
array(101)="cha3:*衩镲"
array(102)="cha4:差刹*诧岔衩杈汊姹"
array(103)="chai1:差拆钗"
array(104)="chai2:柴豺侪"
array(105)="chai4:虿瘥"
array(106)="chan1:搀掺觇"
array(107)="chan2:单缠禅蝉馋潺蟾婵谗廛孱镡澶躔"
array(108)="chan3:产铲阐谄冁蒇骣"
array(109)="chan4:颤忏羼"
array(110)="chang1:昌*猖伥阊菖鲳"
array(111)="chang2:长场常尝肠偿倘裳嫦徜苌"
array(112)="chang3:场厂敞氅昶惝"
array(113)="chang4:唱畅倡怅鬯"
array(114)="chao1:超抄吵钞绰剿焯怊"
array(115)="chao2:朝潮嘲巢晁"
array(116)="chao3:炒吵"
array(117)="chao4:耖"
array(118)="che1:车砗"
array(119)="che3:尺扯"
array(120)="che4:彻撤澈掣坼"
array(121)="chen1:郴琛嗔抻"
array(122)="chen2:陈沉晨沈尘臣辰橙忱谌宸"
array(123)="chen3:碜"
array(124)="chen4:称趁衬秤谶榇龀"
array(125)="chen5:伧"
array(126)="cheng1:称撑秤瞠噌铛柽蛏"
array(127)="cheng2:成城程承诚盛乘呈惩澄橙丞埕枨塍铖裎酲"
array(128)="cheng3:逞骋裎"
array(129)="cheng4:称秤"
array(130)="chi1:吃痴哧嗤蚩笞鸱媸螭眵魑"
array(131)="chi2:持迟池驰匙弛踟墀茌篪坻"
array(132)="chi3:尺齿耻侈褫豉"
array(133)="chi4:赤斥翅啻炽敕叱饬傺彳瘛"
array(134)="chong1:冲充涌憧忡艟舂茺"
array(135)="chong2:种重崇虫"
array(136)="chong3:宠"
array(137)="chong4:冲铳"
array(138)="chou1:抽瘳"
array(139)="chou2:愁仇筹酬绸踌惆畴稠帱俦雠"
array(140)="chou3:丑瞅"
array(141)="chou4:臭"
array(142)="chu1:出初樗"
array(143)="chu2:除厨躇橱雏锄蜍刍滁蹰"
array(144)="chu3:处楚储础杵褚楮"
array(145)="chu4:处触畜矗怵搐绌黜亍憷"
array(146)="chuai1:揣搋"
array(147)="chuai3:揣"
array(148)="chuai4:揣啜踹嘬膪"
array(149)="chuan1:穿川巛氚"
array(150)="chuan2:传船遄椽舡"
array(151)="chuan3:喘舛"
array(152)="chuan4:串钏"
array(153)="chuang1:创窗疮"
array(154)="chuang2:床幢"
array(155)="chuang3:闯"
array(156)="chuang4:创怆"
array(157)="chui1:吹炊"
array(158)="chui2:垂锤捶陲椎槌棰"
array(159)="chun1:春椿蝽"
array(160)="chun2:纯唇醇淳鹑莼"
array(161)="chun3:蠢"
array(162)="chuo1:戳踔"
array(163)="chuo4:绰啜辍龊"
array(164)="ci1:差刺疵呲"
array(165)="ci2:词辞慈磁瓷兹茨雌祠茈鹚糍"
array(166)="ci3:此"
array(167)="ci4:次刺赐伺"
array(168)="cong1:从匆聪葱囱苁骢璁枞"
array(169)="cong2:从丛琮淙"
array(170)="cou4:凑楱辏腠"
array(171)="cu1:粗"
array(172)="cu2:徂殂"
array(173)="cu4:促簇醋卒猝蹴蹙蔟酢"
array(174)="cuan1:蹿撺汆镩"
array(175)="cuan2:攒"
array(176)="cuan4:窜篡爨"
array(177)="cui1:衰催摧崔隹榱"
array(178)="cui3:璀"
array(179)="cui4:脆粹萃翠瘁悴淬毳啐"
array(180)="cun1:村皴"
array(181)="cun2:存蹲"
array(182)="cun3:忖"
array(183)="cun4:寸"
array(184)="cuo1:搓撮磋蹉"
array(185)="cuo2:嵯矬痤瘥鹾"
array(186)="cuo3:撮脞"
array(187)="cuo4:错措挫厝锉"
array(188)="da1:答搭嗒耷褡哒"
array(189)="da2:打达答瘩沓鞑怛笪靼妲"
array(190)="da3:打"
array(191)="da4:大"
array(192)="da5:塔疸"
array(193)="dai1:待呆呔"
array(194)="dai3:逮歹傣"
array(195)="dai4:大代带待戴袋贷逮殆黛怠玳岱迨骀绐埭甙"
array(196)="dan1:单担丹耽眈殚箪儋瘅聃郸"
array(197)="dan3:担胆掸赕疸瘅"
array(198)="dan4:但担石弹淡旦蛋诞惮啖澹氮萏瘅"
array(199)="dang1:当裆铛"
array(200)="dang3:党挡谠"
array(201)="dang4:当荡档挡宕菪凼砀"
array(202)="dao1:刀叨忉氘"
array(203)="dao2:叨"
array(204)="dao3:导倒岛蹈捣祷"
array(205)="dao4:到道倒悼盗稻焘帱纛"
array(206)="de2:得德锝"
array(207)="de5:的地得底"
array(208)="dei3:得"
array(209)="deng1:登灯蹬噔簦"
array(210)="deng3:等戥"
array(211)="deng4:邓凳瞪澄蹬磴镫嶝"
array(212)="di1:提低滴堤嘀氐镝羝"
array(213)="di2:的敌迪笛涤嘀狄嫡翟荻籴觌镝"
array(214)="di3:底抵诋邸砥坻柢氐骶"
array(215)="di4:的地第帝弟递蒂缔谛睇棣娣碲绨"
array(216)="dia3:嗲"
array(217)="dian1:颠滇掂癫巅"
array(218)="dian3:点典碘踮丶"
array(219)="dian4:电店甸淀垫殿奠惦佃玷簟坫靛钿癜阽"
array(220)="diao1:雕刁凋叼貂碉鲷"
array(221)="diao3:鸟"
array(222)="diao4:调掉吊钓铫铞"
array(223)="die1:爹跌踮"
array(224)="die2:叠迭碟谍蝶喋佚牒耋蹀堞瓞揲垤鲽"
array(225)="ding1:丁盯钉叮町酊疔仃耵玎"
array(226)="ding3:顶鼎酊"
array(227)="ding4:定订钉铤*锭碇啶"
array(228)="diu1:丢铥"
array(229)="dong1:东冬咚岽氡鸫"
array(230)="dong3:懂董硐"
array(231)="dong4:动洞冻栋恫侗垌峒胨胴硐"
array(232)="dou1:都兜蔸篼"
array(233)="dou3:斗抖陡蚪"
array(234)="dou4:读斗豆逗窦痘"
array(235)="du1:都督嘟"
array(236)="du2:读独顿毒渎牍犊黩髑椟"
array(237)="du3:肚睹堵赌笃"
array(238)="du4:度渡肚杜妒镀芏蠹"
array(239)="duan1:端"
array(240)="duan3:短"
array(241)="duan4:断段锻缎煅椴簖"
array(242)="dui1:堆"
array(243)="dui4:对队兑敦碓憝怼镦"
array(244)="dun1:吨敦蹲墩礅镦"
array(245)="dun3:盹趸"
array(246)="dun4:顿盾钝炖遁沌囤砘"
array(247)="duo1:多咄哆掇裰"
array(248)="duo2:度夺踱铎"
array(249)="duo3:朵躲垛哚缍"
array(250)="duo4:舵堕跺剁惰垛驮沲柁"
array(251)="e1:阿婀屙"
array(252)="e2:额俄哦鹅娥峨蛾讹莪锇"
array(253)="e3:恶"
array(254)="e4:恶饿扼愕遏噩呃厄鄂轭颚鳄谔锷萼腭垩鹗苊阏"
array(255)="e5:呃"
array(256)="ei2:诶"
array(257)="ei3:诶"
array(258)="ei4:诶"
array(259)="en1:恩蒽"
array(260)="en4:摁"
array(261)="er2:而儿鸸鲕"
array(262)="er3:尔耳迩饵洱珥铒"
array(263)="er4:二贰佴"
array(264)="fa1:发"
array(265)="fa2:罚乏伐阀筏垡"
array(266)="fa3:法砝"
array(267)="fa4:发珐"
array(268)="fan1:翻番帆藩幡蕃"
array(269)="fan2:凡烦繁泛樊蕃燔矾蘩钒蹯"
array(270)="fan3:反返"
array(271)="fan4:饭犯范贩泛梵畈"
array(272)="fang1:方芳妨坊邡枋钫"
array(273)="fang2:房防妨坊肪鲂"
array(274)="fang3:访仿纺彷舫"
array(275)="fang4:放"
array(276)="fei1:非飞啡菲扉霏妃绯蜚鲱"
array(277)="fei2:肥腓淝"
array(278)="fei3:菲匪诽斐蜚翡悱篚榧"
array(279)="fei4:费废沸肺吠痱狒镄芾"
array(280)="fen1:分纷氛芬吩酚玢"
array(281)="fen2:坟焚汾棼鼢"
array(282)="fen3:粉"
array(283)="fen4:分份奋愤粪忿偾瀵鲼"
array(284)="feng1:风封丰峰疯锋蜂枫烽酆葑沣砜"
array(285)="feng2:逢缝冯"
array(286)="feng3:讽唪"
array(287)="feng4:奉缝凤俸葑"
array(288)="fo2:佛"
array(289)="fou3:否缶"
array(290)="fu1:夫肤敷孵呋稃麸趺跗"
array(291)="fu2:夫服福佛幅伏符浮扶弗拂袱俘芙孚匐辐涪氟桴蜉苻茯莩菔幞怫艴郛绂绋凫祓砩黻罘稃蚨芾蝠"
array(292)="fu3:府父腐抚辅甫俯斧脯釜腑拊滏黼"
array(293)="fu4:服复父负副富付妇附赴腹覆赋傅缚咐阜讣驸赙馥蝮鲋鳆"
array(294)="fu5:咐"
array(295)="ga1:夹咖嘎胳伽旮"
array(296)="ga2:嘎噶轧尜钆"
array(297)="ga3:嘎尕"
array(298)="ga4:尬"
array(299)="gai1:该赅垓陔"
array(300)="gai3:改"
array(301)="gai4:概盖丐钙芥溉戤"
array(302)="gan1:干甘肝杆尴乾竿坩苷柑泔矸疳酐"
array(303)="gan3:感敢赶杆橄秆擀澉"
array(304)="gan4:干赣淦绀旰"
array(305)="gang1:刚钢纲缸扛杠冈肛罡"
array(306)="gang3:港岗"
array(307)="gang4:钢杠戆筻"
array(308)="gao1:高糕膏皋羔睾篙槔"
array(309)="gao3:稿搞藁槁缟镐杲"
array(310)="gao4:告膏诰郜锆"
array(311)="ge1:歌格哥戈割胳搁疙咯鸽屹仡圪纥袼"
array(312)="ge2:革格隔葛阁胳搁蛤嗝骼颌搿膈镉塥鬲"
array(313)="ge3:个各合盖葛哿舸"
array(314)="ge4:个各铬硌虼"
array(315)="gei3:给"
array(316)="gen1:根跟"
array(317)="gen2:哏"
array(318)="gen3:艮"
array(319)="gen4:亘艮茛"
array(320)="geng1:更耕庚羹赓"
array(321)="geng3:耿颈梗哽鲠埂绠"
array(322)="geng4:更"
array(323)="gong1:工公共红供功攻宫恭躬龚弓肱蚣觥"
array(324)="gong3:巩拱汞珙"
array(325)="gong4:共供贡"
array(326)="gou1:句沟勾钩篝佝枸缑鞲"
array(327)="gou3:狗苟岣枸笱"
array(328)="gou4:够购构勾觏垢诟媾遘彀"
array(329)="gu1:姑骨孤估辜咕呱箍沽菇轱鸪毂菰蛄酤觚"
array(330)="gu2:骨"
array(331)="gu3:古股鼓骨谷贾汩蛊毂鹄牯臌诂瞽罟钴嘏蛄鹘"
array(332)="gu4:故顾固估雇锢梏牿崮痼鲴"
array(333)="gua1:括瓜刮呱栝胍鸹"
array(334)="gua3:寡呱剐"
array(335)="gua4:挂褂卦诖"
array(336)="guai1:乖掴"
array(337)="guai3:拐"
array(338)="guai4:怪"
array(339)="guan1:关观官冠棺矜莞倌纶鳏"
array(340)="guan3:管馆莞"
array(341)="guan4:观惯冠贯罐灌掼盥涫鹳"
array(342)="guang1:光咣胱桄"
array(343)="guang3:广犷"
array(344)="guang4:逛桄"
array(345)="gui1:规归瑰龟硅闺皈傀圭妫鲑"
array(346)="gui3:鬼轨诡癸匦庋宄晷簋"
array(347)="gui4:贵桂跪柜刽炔刿桧炅鳜"
array(348)="gun3:滚鲧衮绲磙辊"
array(349)="gun4:棍"
array(350)="guo1:过锅郭涡聒蝈崞埚呙"
array(351)="guo2:国帼掴馘虢"
array(352)="guo3:果裹猓椁蜾"
array(353)="guo4:过"
array(354)="ha1:哈铪"
array(355)="ha2:虾蛤"
array(356)="ha3:哈"
array(357)="ha4:哈"
array(358)="hai1:嘿咳嗨"
array(359)="hai2:还孩骸"
array(360)="hai3:海胲醢"
array(361)="hai4:害亥骇氦"
array(362)="han1:酣憨顸鼾蚶"
array(363)="han2:含寒汗韩涵函晗焓邯邗"
array(364)="han3:喊罕阚"
array(365)="han4:汉汗憾翰撼旱捍悍瀚焊颔菡撖"
array(366)="hang1:夯"
array(367)="hang2:行航吭杭绗珩颃"
array(368)="hang4:行巷沆"
array(369)="hao1:蒿薅嚆"
array(370)="hao2:号毫豪嚎壕貉嗥濠蚝"
array(371)="hao3:好郝"
array(372)="hao4:好号浩耗皓昊灏镐颢"
array(373)="he1:喝呵诃嗬"
array(374)="he2:和何合河核盒禾荷阂涸阖貉曷颌劾菏盍纥蚵翮"
array(375)="he4:和何喝赫吓贺荷鹤壑褐"
array(376)="hei1:黑嘿嗨"
array(377)="hen2:痕"
array(378)="hen3:很狠"
array(379)="hen4:恨"
array(380)="heng1:哼亨"
array(381)="heng2:行横衡恒蘅珩桁"
array(382)="heng4:横"
array(383)="hng5:哼"
array(384)="hong1:轰哄烘薨訇"
array(385)="hong2:红洪鸿宏虹弘泓闳蕻黉荭"
array(386)="hong3:哄"
array(387)="hong4:哄讧蕻"
array(388)="hou2:侯喉猴瘊篌糇骺"
array(389)="hou3:吼"
array(390)="hou4:后候後厚侯逅堠鲎"
array(391)="hu1:乎呼戏忽糊惚唿滹轷烀"
array(392)="hu2:和胡湖糊核壶狐葫弧蝴囫瑚斛鹄醐猢槲鹕觳煳鹘"
array(393)="hu3:虎浒唬琥"
array(394)="hu4:护户互糊虎沪祜扈戽笏岵怙瓠鹱冱"
array(395)="hua1:华化花哗砉"
array(396)="hua2:华划滑哗豁猾骅铧"
array(397)="hua4:话华化划画桦"
array(398)="huai2:怀徊淮槐踝"
array(399)="huai4:坏"
array(400)="huai5:划"
array(401)="huan1:欢獾"
array(402)="huan2:还环寰鬟桓圜洹郇缳锾萑"
array(403)="huan3:缓"
array(404)="huan4:换患幻唤宦焕痪涣浣奂擐豢漶逭鲩"
array(405)="huang1:荒慌肓"
array(406)="huang2:黄皇煌惶徨璜簧凰潢蝗蟥遑隍磺癀湟篁鳇"
array(407)="huang3:晃恍谎幌"
array(408)="huang4:晃"
array(409)="hui1:挥辉灰恢徽堕诙晖麾珲咴虺隳"
array(410)="hui2:回徊蛔茴洄"
array(411)="hui3:毁悔虺"
array(412)="hui4:会汇惠慧溃绘讳贿晦秽诲彗烩荟卉喙恚浍哕缋桧蕙蟪"
array(413)="hun1:婚昏荤阍"
array(414)="hun2:混魂浑馄珲"
array(415)="hun4:混诨溷"
array(416)="huo1:豁劐攉锪耠"
array(417)="huo2:和活"
array(418)="huo3:火伙夥钬"
array(419)="huo4:和或获货祸惑霍豁藿嚯镬蠖"
array(420)="ji1:其几期机基击奇激积鸡迹绩饥缉圾姬矶肌讥叽稽畸跻羁嵇唧畿齑箕屐剞玑赍犄墼芨丌咭笄乩"
array(421)="ji2:革及即辑级极集急籍吉疾嫉藉脊棘汲岌笈瘠诘亟楫蒺殛佶戢嵴蕺"
array(422)="ji3:几给己革济纪挤脊戟虮掎麂"
array(423)="ji4:记系计济寄际技纪继既齐季寂祭忌剂冀*骥蓟悸伎暨霁稷偈鲫髻觊荠跽哜鲚洎芰"
array(424)="jia1:家加佳夹嘉茄挟枷珈迦伽浃痂笳葭镓袈跏"
array(425)="jia2:夹颊戛荚郏恝铗袷蛱"
array(426)="jia3:假角脚甲搅贾缴绞饺矫佼狡剿侥皎胛铰挢岬徼湫敫钾嘏瘕"
array(427)="jia4:价假架驾嫁稼"
array(428)="jia5:家"
array(429)="jian1:间坚监渐兼艰肩浅尖*溅煎歼缄笺菅蒹搛湔缣戋犍鹣鲣鞯"
array(430)="jian3:简减检剪捡拣俭碱茧柬蹇謇硷睑锏枧戬谫囝裥笕翦趼"
array(431)="jian4:见间件建监渐健剑键荐鉴践舰箭*溅槛谏僭涧饯毽锏楗腱牮踺"
array(432)="jiang1:将江疆姜浆僵缰茳礓豇"
array(433)="jiang3:讲奖蒋桨耩"
array(434)="jiang4:将强降酱浆虹匠犟绛洚糨"
array(435)="jiao1:教交焦骄郊胶椒娇浇姣跤蕉礁鲛僬鹪蛟艽茭"
array(436)="jiao2:嚼矫峤"
array(437)="jiao3:角脚搅缴绞饺矫佼狡剿侥皎挢徼湫敫铰"
array(438)="jiao4:教觉校叫较轿嚼窖酵噍峤徼醮"
array(439)="jie1:接结节街阶皆揭楷嗟秸疖喈"
array(440)="jie2:结节杰捷截洁劫竭睫桔拮孑诘桀碣偈颉讦婕羯鲒"
array(441)="jie3:解姐"
array(442)="jie4:界解价介借戒届藉诫芥疥蚧骱"
array(443)="jie5:家价"
array(444)="jin1:今金禁津斤筋巾襟矜衿"
array(445)="jin3:尽仅紧谨锦瑾馑卺廑堇槿"
array(446)="jin4:进近尽仅禁劲晋浸靳缙烬噤觐荩赆妗"
array(447)="jing1:经京精惊睛晶荆兢鲸泾旌茎腈菁粳"
array(448)="jing3:警景井颈憬阱儆刭肼"
array(449)="jing4:经境竟静敬镜劲竞净径靖痉迳胫弪婧獍靓"
array(450)="jiong1:扃"
array(451)="jiong3:窘炯迥炅"
array(452)="jiu1:究纠揪鸠赳啾阄鬏"
array(453)="jiu3:九酒久韭灸玖"
array(454)="jiu4:就旧救疚舅咎臼鹫僦厩桕柩"
array(455)="ju1:车据且居俱拘驹鞠锯趄掬疽裾苴椐锔狙琚雎鞫"
array(456)="ju2:局菊桔橘锔"
array(457)="ju3:举柜矩咀沮踽龃榉莒枸"
array(458)="ju4:据句具剧巨聚拒距俱惧沮瞿锯炬趄飓踞遽倨钜犋屦榘窭讵醵苣"
array(459)="juan1:捐圈娟鹃涓镌蠲"
array(460)="juan3:卷锩"
array(461)="juan4:圈卷俊倦眷隽绢狷桊鄄"
array(462)="jue1:嗟撅噘"
array(463)="jue2:觉绝决角脚嚼掘诀崛爵抉倔獗厥蹶攫谲矍孓橛噱珏桷劂爝镢蕨觖"
array(464)="jue3:蹶"
array(465)="jue4:倔"
array(466)="jun1:军均君钧筠龟菌皲麇"
array(467)="jun4:俊峻隽菌郡骏竣捃浚"
array(468)="ka1:咖喀咔"
array(469)="ka3:卡咯咔佧胩"
array(470)="kai1:开揩锎"
array(471)="kai3:慨凯铠楷恺蒈剀垲锴"
array(472)="kai4:忾"
array(473)="kan1:看刊堪勘龛戡"
array(474)="kan3:侃砍坎槛阚莰"
array(475)="kan4:看嵌瞰阚"
array(476)="kang1:康慷糠闶"
array(477)="kang2:扛"
array(478)="kang4:抗炕亢伉闶钪"
array(479)="kao1:*"
array(480)="kao3:考烤拷栲"
array(481)="kao4:*铐犒"
array(482)="ke1:科颗柯呵棵苛磕坷嗑瞌轲稞疴蝌钶窠颏珂髁"
array(483)="ke2:咳壳颏"
array(484)="ke3:可渴坷轲岢"
array(485)="ke4:可克客刻课恪嗑溘骒缂氪锞蚵"
array(486)="ken3:肯恳啃垦龈"
array(487)="ken4:裉"
array(488)="keng1:坑吭铿"
array(489)="kong1:空倥崆箜"
array(490)="kong3:恐孔倥"
array(491)="kong4:空控"
array(492)="kou1:抠芤眍"
array(493)="kou3:口"
array(494)="kou4:扣寇叩蔻筘"
array(495)="ku1:哭枯窟骷刳堀"
array(496)="ku3:苦"
array(497)="ku4:库裤酷喾绔"
array(498)="kua1:夸"
array(499)="kua3:垮侉"
array(500)="kua4:跨挎胯"
array(501)="kuai3:蒯"
array(502)="kuai4:会快块筷脍哙侩狯浍郐"
array(503)="kuan1:宽髋"
array(504)="kuan3:款"
array(505)="kuang1:框筐匡哐诓"
array(506)="kuang2:狂诳"
array(507)="kuang3:夼"
array(508)="kuang4:况矿框旷眶邝圹纩贶"
array(509)="kui1:亏窥盔岿悝"
array(510)="kui2:魁睽逵葵奎馗夔喹隗暌揆蝰"
array(511)="kui3:傀跬"
array(512)="kui4:愧溃馈匮喟聩篑蒉愦"
array(513)="kun1:昆坤鲲锟醌琨髡"
array(514)="kun3:捆悃阃"
array(515)="kun4:困"
array(516)="kuo4:括适阔扩廓栝蛞"
array(517)="la1:拉啦喇垃邋"
array(518)="la2:拉喇旯砬"
array(519)="la3:拉喇"
array(520)="la4:落拉辣腊蜡剌瘌"
array(521)="la5:蓝啦"
array(522)="lai2:来莱徕涞崃铼"
array(523)="lai4:赖睐癞籁赉濑"
array(524)="lan2:兰蓝栏拦篮澜婪岚斓阑褴镧谰"
array(525)="lan3:懒览揽榄缆漤罱"
array(526)="lan4:烂滥"
array(527)="lang1:啷"
array(528)="lang2:狼郎廊琅螂榔锒稂阆"
array(529)="lang3:朗"
array(530)="lang4:浪郎莨蒗阆"
array(531)="lao1:捞"
array(532)="lao2:劳牢唠崂铹痨醪"
array(533)="lao3:老姥佬潦栳铑"
array(534)="lao4:落络唠烙酪涝耢"
array(535)="le1:肋"
array(536)="le4:乐勒仂叻泐鳓"
array(537)="le5:了"
array(538)="lei1:勒擂"
array(539)="lei2:累雷擂羸镭嫘缧檑"
array(540)="lei3:累蕾垒磊儡诔耒"
array(541)="lei4:类泪累擂肋酹"
array(542)="lei5:嘞"
array(543)="leng1:棱"
array(544)="leng2:楞棱塄"
array(545)="leng3:冷"
array(546)="leng4:愣"
array(547)="li1:哩"
array(548)="li2:离丽黎璃漓狸梨篱犁厘罹藜骊蜊黧缡喱鹂嫠蠡鲡蓠"
array(549)="li3:里理李礼哩鲤俚逦娌悝澧锂蠡醴鳢"
array(550)="li4:力利立历例丽励厉莉笠粒俐栗隶吏沥雳莅戾俪砺痢郦詈荔枥呖唳猁溧砾栎轹傈坜苈疠疬蛎鬲篥粝跞藓"
array(551)="li5:璃哩"
array(552)="lia3:俩"
array(553)="lian2:联连怜莲廉帘涟镰裢濂臁奁蠊鲢"
array(554)="lian3:脸敛琏蔹裣"
array(555)="lian4:练恋炼链殓楝潋"
array(556)="liang2:量良梁凉粮粱踉莨椋墚"
array(557)="liang3:两俩魉"
array(558)="liang4:量亮辆凉谅晾踉靓"
array(559)="liao1:撩撂"
array(560)="liao2:聊疗辽僚寥撩撂缭寮燎嘹獠鹩"
array(561)="liao3:了潦燎蓼钌"
array(562)="liao4:了料廖镣撩撂尥钌"
array(563)="lie1:咧"
array(564)="lie3:裂咧"
array(565)="lie4:列烈裂劣猎趔冽洌捩埒躐鬣"
array(566)="lie5:咧"
array(567)="lin2:林临秘邻琳淋霖麟鳞磷嶙辚粼遴啉瞵"
array(568)="lin3:凛懔檩廪"
array(569)="lin4:淋吝躏赁蔺膦"
array(570)="ling1:拎"
array(571)="ling2:令灵零龄凌玲铃陵伶聆囹棱菱苓翎棂瓴绫酃泠羚蛉柃鲮"
array(572)="ling3:领令岭"
array(573)="ling4:令另呤"
array(574)="liu1:溜熘"
array(575)="liu2:留流刘瘤榴浏硫琉遛馏镏旒骝鎏"
array(576)="liu3:柳绺锍"
array(577)="liu4:六陆溜碌遛馏镏鹨"
array(578)="lo5:咯"
array(579)="long1:隆"
array(580)="long2:龙隆笼胧咙聋珑窿茏栊泷砻癃"
array(581)="long3:笼拢垄陇垅"
array(582)="long4:弄"
array(583)="lou1:搂"
array(584)="lou2:楼喽偻娄髅蝼蒌耧"
array(585)="lou3:搂篓嵝"
array(586)="lou4:露陋漏镂瘘"
array(587)="lou5:喽"
array(588)="lu1:噜撸"
array(589)="lu2:卢炉庐芦颅泸轳鲈垆胪鸬舻栌"
array(590)="lu3:鲁芦卤虏掳橹镥"
array(591)="lu4:六路陆录露绿鹿碌禄辘麓赂漉戮簏鹭潞璐辂渌蓼逯"
array(592)="lu5:轳氇"
array(593)="lv3:旅履屡侣缕吕捋铝偻褛膂稆"
array(594)="lv4:律绿率虑滤氯"
array(595)="lv5:驴榈闾"
array(596)="luan2:峦挛孪栾銮滦鸾娈脔"
array(597)="luan3:卵"
array(598)="luan4:乱"
array(599)="lue:3:掠"
array(600)="lue:4:略掠锊"
array(601)="lun1:抡"
array(602)="lun2:论轮伦沦仑抡囵纶"
array(603)="lun4:论"
array(604)="luo1:落罗捋"
array(605)="luo2:罗逻萝螺锣箩骡猡椤脶镙"
array(606)="luo3:裸倮蠃瘰"
array(607)="luo4:落络洛骆咯摞烙珞泺漯荦硌雒"
array(608)="luo5:罗"
array(609)="m2:呒"
array(610)="ma1:妈麻摩抹蚂嬷"
array(611)="ma2:吗麻蟆"
array(612)="ma3:马吗码玛蚂犸"
array(613)="ma4:骂蚂唛杩"
array(614)="ma5:么吗嘛"
array(615)="mai2:埋霾"
array(616)="mai3:买荬"
array(617)="mai4:卖麦迈脉劢"
array(618)="man1:颟"
array(619)="man2:埋蛮馒瞒蔓谩鳗鞔"
array(620)="man3:满螨"
array(621)="man4:慢漫曼蔓谩墁幔缦熳镘"
array(622)="mang2:忙茫盲芒氓邙硭"
array(623)="mang3:莽蟒漭"
array(624)="mao1:猫"
array(625)="mao2:毛猫矛茅髦锚牦旄蝥蟊茆"
array(626)="mao3:卯铆峁泖昴"
array(627)="mao4:冒贸帽貌茂耄瑁懋袤瞀"
array(628)="me5:么麽"
array(629)="mei2:没眉梅媒枚煤霉玫糜酶莓嵋湄楣猸镅鹛"
array(630)="mei3:美每镁浼"
array(631)="mei4:妹魅昧谜媚寐袂"
array(632)="men1:闷"
array(633)="men2:门扪钔"
array(634)="men4:闷懑焖"
array(635)="men5:们"
array(636)="meng1:蒙"
array(637)="meng2:蒙盟朦氓萌檬瞢甍礞虻艨"
array(638)="meng3:蒙猛勐懵蠓蜢锰艋"
array(639)="meng4:梦孟"
array(640)="mi1:眯咪"
array(641)="mi2:迷弥谜靡糜醚麋猕祢縻蘼"
array(642)="mi3:米眯靡弭敉脒芈"
array(643)="mi4:密秘觅蜜谧泌汨宓幂嘧糸"
array(644)="mian2:棉眠绵"
array(645)="mian3:免缅勉腼冕娩渑湎沔眄黾"
array(646)="mian4:面"
array(647)="miao1:喵"
array(648)="miao2:描苗瞄鹋"
array(649)="miao3:秒渺藐缈淼杪邈眇"
array(650)="miao4:妙庙缪"
array(651)="mie1:乜咩"
array(652)="mie4:灭蔑篾蠛"
array(653)="min2:民珉岷缗玟苠"
array(654)="min3:敏悯闽泯皿抿闵愍黾鳘"
array(655)="ming2:名明鸣盟铭冥茗溟瞑暝螟"
array(656)="ming3:酩"
array(657)="ming4:命"
array(658)="miu4:谬缪"
array(659)="mo1:摸"
array(660)="mo2:无模麽磨摸摩魔膜蘑馍摹谟嫫"
array(661)="mo3:抹"
array(662)="mo4:没万默莫末冒磨寞漠墨抹陌脉嘿沫蓦茉貉秣镆殁瘼耱貊貘"
array(663)="mou1:哞"
array(664)="mou2:谋牟眸缪鍪蛑侔"
array(665)="mou3:某"
array(666)="mu2:模毪"
array(667)="mu3:母姆姥亩拇牡"
array(668)="mu4:目木幕慕牧墓募暮牟穆睦沐坶苜仫钼"
array(669)="n2:嗯唔"
array(670)="n3:嗯唔"
array(671)="n4:嗯"
array(672)="na1:那南"
array(673)="na2:拿镎"
array(674)="na3:那哪"
array(675)="na4:那呢纳娜呐捺钠肭衲"
array(676)="na5:哪呐"
array(677)="nai3:哪乃奶氖艿"
array(678)="nai4:奈耐鼐佴萘柰"
array(679)="nan1:囝囡"
array(680)="nan2:难南男楠喃"
array(681)="nan3:腩蝻赧"
array(682)="nan4:难"
array(683)="nang1:囊囔"
array(684)="nang2:囊馕"
array(685)="nang3:馕攮曩"
array(686)="nao1:孬"
array(687)="nao2:努挠呶猱铙硇蛲"
array(688)="nao3:脑恼瑙垴"
array(689)="nao4:闹淖"
array(690)="ne2:哪"
array(691)="ne4:呢呐讷"
array(692)="ne5:呢呐"
array(693)=" "
array(694)="nei3:哪馁"
array(695)="nei4:那内"
array(696)="nen4:嫩恁"
array(697)="neng2:能"
array(698)="ng2:嗯唔"
array(699)="ng3:嗯唔"
array(700)="ng4:嗯"
array(701)="ni1:妮"
array(702)="ni2:呢尼泥倪霓坭猊怩铌鲵"
array(703)="ni3:你拟旎祢"
array(704)="ni4:泥尿逆匿腻昵溺睨慝伲"
array(705)="nian1:蔫拈"
array(706)="nian2:年粘黏鲇鲶"
array(707)="nian3:碾捻撵辇"
array(708)="nian4:念廿酿埝"
array(709)="niang2:娘酿"
array(710)="niang4:酿"
array(711)="niao3:鸟袅嬲茑"
array(712)="niao4:尿溺脲"
array(713)="nie1:捏"
array(714)="nie4:涅聂孽蹑嗫啮镊镍乜陧颞臬蘖"
array(715)="nin2:您恁"
array(716)="ning2:宁凝拧咛狞柠苎甯聍"
array(717)="ning3:拧"
array(718)="ning4:宁拧泞佞"
array(719)="niu1:妞"
array(720)="niu2:牛"
array(721)="niu3:纽扭钮狃忸"
array(722)="niu4:拗"
array(723)="nong2:农浓侬哝脓"
array(724)="nong4:弄"
array(725)="nou4:耨"
array(726)="nu2:奴孥驽"
array(727)="nu3:努弩胬"
array(728)="nu4:怒"
array(729)="nv3:女钕"
array(730)="nv4:恧衄"
array(731)="nuan3:暖"
array(732)="nue:4:虐疟"
array(733)="nuo2:娜挪傩"
array(734)="nuo4:诺懦糯喏搦锘"
array(735)="o1:噢喔"
array(736)="o2:哦"
array(737)="o4:哦"
array(738)="ou1:区欧殴鸥讴瓯沤"
array(739)="ou3:偶呕藕耦"
array(740)="ou4:呕沤怄"
array(741)="pa1:派扒趴啪葩"
array(742)="pa2:爬扒耙杷钯筢"
array(743)="pa4:怕帕"
array(744)="pa5:琶"
array(745)="pai1:拍"
array(746)="pai2:排牌徘俳"
array(747)="pai3:排迫"
array(748)="pai4:派湃蒎哌"
array(749)="pan1:番攀潘扳"
array(750)="pan2:般盘胖磐蹒爿蟠"
array(751)="pan4:判盼叛畔拚襻袢泮"
array(752)="pang1:乓膀滂"
array(753)="pang2:旁庞膀磅彷螃逄"
array(754)="pang3:耪"
array(755)="pang4:胖"
array(756)="pao1:炮抛泡脬"
array(757)="pao2:跑炮袍刨咆狍匏庖"
array(758)="pao3:跑"
array(759)="pao4:炮泡疱"
array(760)="pei1:呸胚醅"
array(761)="pei2:陪培赔裴锫"
array(762)="pei4:配佩沛辔帔旆霈"
array(763)="pen1:喷"
array(764)="pen2:盆湓"
array(765)="pen4:喷"
array(766)="peng1:烹抨砰澎怦嘭"
array(767)="peng2:朋鹏彭棚蓬膨篷澎硼堋蟛"
array(768)="peng3:捧"
array(769)="peng4:碰"
array(770)="pi1:批坏披辟劈坯霹噼丕纰砒邳铍"
array(771)="pi2:皮疲啤脾琵毗郫鼙裨埤陴芘枇罴铍陂蚍蜱貔"
array(772)="pi3:否匹劈痞癖圮擗吡庀仳疋"
array(773)="pi4:屁辟僻譬媲淠甓睥"
array(774)="pian1:片篇偏翩扁犏"
array(775)="pian2:便蹁缏胼骈"
array(776)="pian3:谝"
array(777)="pian4:片骗"
array(778)="piao1:漂飘剽缥螵"
array(779)="piao2:朴瓢嫖"
array(780)="piao3:漂瞟缥殍莩"
array(781)="piao4:票漂骠嘌"
array(782)="pie1:撇瞥氕"
array(783)="pie3:撇丿苤"
array(784)="pin1:拼拚姘"
array(785)="pin2:贫频苹嫔颦"
array(786)="pin3:品榀"
array(787)="pin4:聘牝"
array(788)="ping1:乒娉俜"
array(789)="ping2:平评瓶凭萍屏冯苹坪枰鲆"
array(790)="po1:颇坡泊朴泼陂泺攴钋"
array(791)="po2:繁婆鄱皤"
array(792)="po3:叵钷笸"
array(793)="po4:破迫朴魄粕珀"
array(794)="pou1:剖"
array(795)="pou2:裒掊"
array(796)="pou3:掊"
array(797)="pu1:铺扑仆噗"
array(798)="pu2:葡蒲仆脯菩匍璞濮莆镤"
array(799)="pu3:普堡朴谱浦溥埔圃氆镨蹼"
array(800)="pu4:暴铺堡曝瀑"
array(801)="qi1:期七妻欺缉戚凄漆栖沏蹊嘁萋槭柒欹桤"
array(802)="qi2:其奇棋齐旗骑歧琪祈脐祺祁崎琦淇岐荠俟耆芪颀圻骐畦亓萁蕲畦蛴蜞綦鳍麒"
array(803)="qi3:起企启岂乞稽绮杞芑屺綮"
array(804)="qi4:气妻器汽齐弃泣契迄砌憩汔亟讫葺碛"
array(805)="qia1:掐伽葜袷"
array(806)="qia3:卡"
array(807)="qia4:恰洽髂"
array(808)="qian1:千签牵迁谦铅骞悭芊愆阡仟岍扦佥搴褰钎"
array(809)="qian2:前钱潜乾虔钳掮黔荨钤犍箝鬈"
array(810)="qian3:浅遣谴缱肷"
array(811)="qian4:欠歉纤嵌倩堑茜芡慊椠"
array(812)="qiang1:将枪抢腔呛锵跄羌戕戗镪蜣锖"
array(813)="qiang2:强墙蔷樯嫱"
array(814)="qiang3:强抢襁镪羟"
array(815)="qiang4:呛跄炝戗"
array(816)="qiao1:悄敲雀锹跷橇缲硗劁"
array(817)="qiao2:桥乔侨瞧翘蕉憔樵峤谯荞鞒"
array(818)="qiao3:悄巧雀愀"
array(819)="qiao4:翘俏窍壳峭撬鞘诮谯"
array(820)="qie1:切"
array(821)="qie2:茄伽"
array(822)="qie3:且"
array(823)="qie4:切窃怯趄妾砌惬锲挈郄箧慊"
array(824)="qin1:亲钦侵衾"
array(825)="qin2:琴秦勤芹擒矜覃禽噙廑溱檎锓嗪芩螓"
array(826)="qin3:寝"
array(827)="qin4:沁揿吣"
array(828)="qing1:青清轻倾卿氢蜻圊鲭"
array(829)="qing2:情晴擎氰檠黥"
array(830)="qing3:请顷謦苘"
array(831)="qing4:亲庆罄磬箐綮"
array(832)="qiong2:穷琼穹茕邛蛩筇跫銎"
array(833)="qiu1:秋邱丘龟蚯鳅楸湫"
array(834)="qiu2:求球仇囚酋裘虬俅遒赇泅逑犰蝤巯鼽"
array(835)="qiu3:糗"
array(836)="qu1:区曲屈趋驱躯觑岖蛐祛蛆麴诎黢"
array(837)="qu2:渠瞿衢癯劬璩氍朐磲鸲蕖蠼蘧"
array(838)="qu3:取曲娶龋苣"
array(839)="qu4:去趣觑阒"
array(840)="qu5:戌"
array(841)="quan1:圈悛"
array(842)="quan2:全权泉拳诠颧蜷荃铨痊醛辁筌鬈"
array(843)="quan3:犬绻畎"
array(844)="quan4:劝券"
array(845)="que1:缺阙炔"
array(846)="que2:瘸"
array(847)="que4:却确雀榷鹊阕阙悫"
array(848)="qun1:逡"
array(849)="qun2:群裙麇"
array(850)="ran2:然燃髯蚺"
array(851)="ran3:染冉苒"
array(852)="rang1:嚷"
array(853)="rang2:瓤禳穰"
array(854)="rang3:嚷攘壤禳"
array(855)="rang4:让"
array(856)="rao2:饶娆桡荛"
array(857)="rao3:扰绕娆"
array(858)="rao4:绕"
array(859)="re3:若惹喏"
array(860)="re4:热"
array(861)="ren2:人任仁壬"
array(862)="ren3:忍稔荏"
array(863)="ren4:任认韧刃纫饪仞葚妊轫衽"
array(864)="reng1:扔"
array(865)="reng2:仍"
array(866)="ri4:日"
array(867)="rong2:容荣融蓉溶绒熔榕戎嵘茸狨肜蝾"
array(868)="rong3:冗"
array(869)="rou2:柔揉蹂糅鞣"
array(870)="rou4:肉"
array(871)="ru2:如儒茹嚅濡孺蠕薷铷襦颥"
array(872)="ru3:辱乳汝"
array(873)="ru4:入褥缛洳溽蓐"
array(874)="ruan3:软阮朊"
array(875)="rui2:蕤"
array(876)="rui3:蕊"
array(877)="rui4:瑞锐芮睿枘蚋"
array(878)="run4:润闰"
array(879)="ruo4:若弱偌箬"
array(880)="sa1:撒仨挲"
array(881)="sa3:洒撒"
array(882)="sa4:萨卅飒脎"
array(883)="sai1:思塞腮鳃噻"
array(884)="sai4:赛塞"
array(885)="san1:三叁毵"
array(886)="san3:散伞馓糁霰"
array(887)="san4:散"
array(888)="sang1:丧桑"
array(889)="sang3:嗓搡磉颡"
array(890)="sang4:丧"
array(891)="sao1:骚搔臊缲缫鳋"
array(892)="sao3:扫嫂"
array(893)="sao4:扫梢臊埽瘙"
array(894)="se4:色塞涩瑟啬铯穑"
array(895)="sen1:森"
array(896)="seng1:僧"
array(897)="sha1:杀沙刹纱杉莎煞砂挲鲨痧裟铩"
array(898)="sha3:傻"
array(899)="sha4:沙啥厦煞霎嗄歃唼"
array(900)="shai1:筛酾"
array(901)="shai3:色"
array(902)="shai4:晒"
array(903)="shan1:山衫删煽扇珊杉栅跚姗潸膻芟埏钐舢苫髟"
array(904)="shan3:闪陕掺掸"
array(905)="shan4:单善扇禅擅膳讪汕赡缮嬗掸骟剡苫鄯钐疝蟮鳝"
array(906)="shang1:商伤汤殇觞熵墒"
array(907)="shang3:上赏晌垧"
array(908)="shang4:上尚绱"
array(909)="shang5:裳"
array(910)="shao1:烧稍梢捎鞘蛸筲艄"
array(911)="shao2:勺韶苕杓芍"
array(912)="shao3:少"
array(913)="shao4:少绍召稍哨邵捎潲劭"
array(914)="she1:奢赊猞畲"
array(915)="she2:折舌蛇佘"
array(916)="she3:舍"
array(917)="she4:社设舍涉射摄赦慑麝滠歙厍"
array(918)="shei2:谁"
array(919)="shen1:身深参申伸绅呻莘娠诜砷糁"
array(920)="shen2:什神甚"
array(921)="shen3:审沈婶谂哂渖矧"
array(922)="shen4:甚慎渗肾蜃葚胂椹"
array(923)="sheng1:生声胜升牲甥笙"
array(924)="sheng2:绳渑"
array(925)="sheng3:省眚"
array(926)="sheng4:胜圣盛乘剩嵊晟"
array(927)="shi1:师诗失施尸湿狮嘘虱蓍酾鲺"
array(928)="shi2:时十实什识食石拾蚀埘莳炻鲥"
array(929)="shi3:使始史驶屎矢豕"
array(930)="shi4:是事世市士式视似示室势试释适氏饰逝誓嗜侍峙仕恃柿轼拭噬弑谥莳贳铈螫舐筮"
array(931)="shi5:殖匙"
array(932)="shou1:收"
array(933)="shou2:熟"
array(934)="shou3:手首守艏"
array(935)="shou4:受授售瘦寿兽狩绶"
array(936)="shu1:书输殊舒叔疏抒淑梳枢蔬倏菽摅姝纾毹殳疋"
array(937)="shu2:熟孰赎塾秫"
array(938)="shu3:数属署鼠薯暑蜀黍曙"
array(939)="shu4:数术树述束竖恕墅漱俞戍庶澍沭丨腧"
array(940)="shua1:刷唰"
array(941)="shua3:耍"
array(942)="shua4:刷"
array(943)="shuai1:衰摔"
array(944)="shuai3:甩"
array(945)="shuai4:率帅蟀"
array(946)="shuan1:栓拴闩"
array(947)="shuan4:涮"
array(948)="shuang1:双霜孀泷"
array(949)="shuang3:爽"
array(950)="shui2:谁"
array(951)="shui3:水"
array(952)="shui4:说税睡"
array(953)="shun3:吮"
array(954)="shun4:顺舜瞬"
array(955)="shuo1:说"
array(956)="shuo4:数朔硕烁铄妁蒴槊搠"
array(957)="si1:思斯司私丝撕厮嘶鸶咝澌缌锶厶蛳"
array(958)="si3:死"
array(959)="si4:四似食寺肆伺饲嗣巳祀驷泗俟汜兕姒耜笥"
array(960)="si5:厕"
array(961)="song1:松忪淞崧嵩凇菘"
array(962)="song3:耸悚怂竦"
array(963)="song4:送宋诵颂讼"
array(964)="sou1:搜艘馊嗖溲飕锼螋"
array(965)="sou3:擞叟薮嗾瞍"
array(966)="sou4:嗽擞"
array(967)="su1:苏稣酥"
array(968)="su2:俗"
array(969)="su4:诉速素肃宿缩塑溯粟簌夙嗉谡僳愫涑蔌觫"
array(970)="suan1:酸狻"
array(971)="suan4:算蒜"
array(972)="sui1:虽尿荽睢眭濉"
array(973)="sui2:随遂隋绥"
array(974)="sui3:髓"
array(975)="sui4:岁碎遂祟隧邃穗燧谇"
array(976)="sun1:孙荪狲飧"
array(977)="sun3:损笋榫隼"
array(978)="suo1:缩莎梭嗦唆挲娑睃桫嗍蓑羧"
array(979)="suo3:所索锁琐唢"
array(980)="ta1:他她它踏塌遢溻铊趿"
array(981)="ta3:塔鳎獭"
array(982)="ta4:踏拓榻嗒蹋沓挞闼漯"
array(983)="tai1:台胎苔"
array(984)="tai2:台抬苔邰薹骀炱跆鲐"
array(985)="tai3:呔"
array(986)="tai4:太态泰汰酞肽钛"
array(987)="tan1:摊贪滩瘫坍"
array(988)="tan2:谈弹坛谭潭覃痰澹檀昙锬镡郯"
array(989)="tan3:坦毯忐袒钽"
array(990)="tan4:探叹炭碳"
array(991)="tang1:汤趟铴镗耥羰"
array(992)="tang2:堂唐糖膛塘棠搪溏螳瑭樘镗螗饧醣"
array(993)="tang3:躺倘淌傥帑"
array(994)="tang4:趟烫"
array(995)="tao1:涛掏滔叨焘韬饕绦"
array(996)="tao2:逃陶桃淘萄啕洮鼗"
array(997)="tao3:讨"
array(998)="tao4:套"
array(999)="te4:特忑忒慝铽"
array(1000)="tei1:忒"
array(1001)="teng2:腾疼藤誊滕"
array(1002)="ti1:体踢梯剔锑"
array(1003)="ti2:提题啼蹄醍绨缇鹈荑"
array(1004)="ti3:体"
array(1005)="ti4:替涕剃惕屉嚏悌倜逖绨裼"
array(1006)="tian1:天添"
array(1007)="tian2:田填甜恬佃阗畋钿"
array(1008)="tian3:腆舔忝殄"
array(1009)="tian4:掭"
array(1010)="tiao1:挑佻祧"
array(1011)="tiao2:条调迢鲦苕髫龆蜩笤"
array(1012)="tiao3:挑窕"
array(1013)="tiao4:跳眺粜"
array(1014)="tie1:贴帖萜"
array(1015)="tie3:铁帖"
array(1016)="tie4:帖餮"
array(1017)="ting1:听厅汀烃"
array(1018)="ting2:停庭亭婷廷霆蜓葶莛"
array(1019)="ting3:挺艇町铤梃"
array(1020)="ting4:梃"
array(1021)="tong1:通恫嗵"
array(1022)="tong2:同童彤铜桐瞳佟酮侗仝垌茼峒潼砼"
array(1023)="tong3:统筒桶捅侗"
array(1024)="tong4:同通痛恸"
array(1025)="tou1:偷"
array(1026)="tou2:头投骰"
array(1027)="tou3:钭"
array(1028)="tou4:透"
array(1029)="tu1:突秃凸"
array(1030)="tu2:图途徒屠涂荼菟酴"
array(1031)="tu3:土吐钍"
array(1032)="tu4:吐兔堍菟"
array(1033)="tuan1:湍"
array(1034)="tuan2:团抟"
array(1035)="tuan3:疃"
array(1036)="tuan4:彖"
array(1037)="tui1:推忒"
array(1038)="tui2:颓"
array(1039)="tui3:腿"
array(1040)="tui4:退褪蜕煺"
array(1041)="tun1:吞暾"
array(1042)="tun2:屯饨臀囤豚"
array(1043)="tun3:氽"
array(1044)="tun4:褪"
array(1045)="tuo1:托脱拖乇"
array(1046)="tuo2:陀舵驼砣驮沱跎坨鸵橐佗铊酡柁鼍"
array(1047)="tuo3:妥椭庹"
array(1048)="tuo4:魄拓唾柝箨"
array(1049)="wa1:挖哇凹娲蛙洼"
array(1050)="wa2:娃"
array(1051)="wa3:瓦佤"
array(1052)="wa4:瓦袜腽"
array(1053)="wa5:哇"
array(1054)="wai1:歪"
array(1055)="wai3:崴"
array(1056)="wai4:外"
array(1057)="wan1:湾弯蜿剜豌"
array(1058)="wan2:完玩顽丸纨芄烷"
array(1059)="wan3:晚碗挽婉惋宛莞娩畹皖绾琬脘菀"
array(1060)="wan4:万腕蔓"
array(1061)="wang1:汪尢"
array(1062)="wang2:王忘亡芒"
array(1063)="wang3:往网枉惘罔辋魍"
array(1064)="wang4:望王往忘旺妄"
array(1065)="wei1:委威微危巍萎偎薇逶煨崴葳隈"
array(1066)="wei2:为维围唯违韦惟帷帏圩囗潍桅嵬闱沩涠"
array(1067)="wei3:委伟唯尾玮伪炜纬萎娓苇猥痿韪洧隗诿艉鲔"
array(1068)="wei4:为位未味卫谓遗慰魏蔚畏胃喂尉渭猬軎"
array(1069)="wen1:温瘟"
array(1070)="wen2:文闻纹蚊雯璺阌"
array(1071)="wen3:稳吻紊刎"
array(1072)="wen4:问纹汶璺"
array(1073)="weng1:翁嗡"
array(1074)="weng3:蓊"
array(1075)="weng4:瓮蕹"
array(1076)="wo1:窝涡蜗喔倭挝莴"
array(1077)="wo2:哦"
array(1078)="wo3:我"
array(1079)="wo4:握卧哦渥沃斡幄肟硪龌"
array(1080)="wu1:於恶屋污乌巫呜诬兀钨邬圬"
array(1081)="wu2:无亡吴吾捂毋梧唔芜浯蜈鼯"
array(1082)="wu3:五武午舞伍侮捂妩忤鹉牾迕庑怃仵"
array(1083)="wu4:物务误恶悟乌雾勿坞戊兀晤鹜痦寤骛芴杌焐阢婺鋈"
array(1084)="xi1:西息希吸惜稀悉析夕牺腊昔熙兮溪嘻锡晰樨熄膝栖郗犀曦奚羲唏蹊淅皙汐嬉茜熹烯翕蟋歙浠僖穸蜥螅菥舾矽粞硒醯欷鼷"
array(1085)="xi2:席习袭媳檄隰觋"
array(1086)="xi3:喜洗禧徙玺屣葸蓰铣"
array(1087)="xi4:系细戏隙饩阋禊舄"
array(1088)="xia1:瞎虾呷"
array(1089)="xia2:峡侠狭霞暇辖遐匣黠瑕狎硖瘕柙"
array(1090)="xia4:下夏吓厦唬罅"
array(1091)="xian1:先鲜仙掀纤暹莶锨氙祆籼酰跹"
array(1092)="xian2:闲贤嫌咸弦娴衔涎舷鹇痫"
array(1093)="xian3:显险鲜洗跣猃藓铣燹蚬筅冼"
array(1094)="xian4:现见线限县献宪陷羡馅腺岘苋霰"
array(1095)="xiang1:相香乡箱厢湘镶襄骧葙芗缃"
array(1096)="xiang2:降详祥翔庠"
array(1097)="xiang3:想响享飨饷鲞"
array(1098)="xiang4:相向象像项巷橡蟓"
array(1099)="xiao1:消销潇肖萧宵削嚣逍硝霄哮枭骁箫枵哓蛸绡魈"
array(1100)="xiao2:淆崤"
array(1101)="xiao3:小晓筱"
array(1102)="xiao4:笑校效肖孝啸"
array(1103)="xie1:些歇楔蝎"
array(1104)="xie2:叶协鞋携斜胁谐邪挟偕撷勰颉缬"
array(1105)="xie3:写血"
array(1106)="xie4:写解谢泄契械屑卸懈泻亵蟹邂榭瀣薤燮躞廨绁渫榍獬"
array(1107)="xin1:心新欣辛薪馨鑫芯昕忻歆锌"
array(1108)="xin2:寻镡"
array(1109)="xin4:信芯衅囟"
array(1110)="xing1:兴星腥惺猩"
array(1111)="xing2:行形型刑邢陉荥饧硎"
array(1112)="xing3:省醒擤"
array(1113)="xing4:性兴姓幸杏悻荇"
array(1114)="xiong1:兄胸凶匈汹芎"
array(1115)="xiong2:雄熊"
array(1116)="xiu1:修休羞咻馐庥鸺貅髹"
array(1117)="xiu3:宿朽"
array(1118)="xiu4:秀袖宿臭绣锈嗅岫溴"
array(1119)="xu1:需须虚吁嘘墟戌胥砉圩盱顼"
array(1120)="xu2:徐"
array(1121)="xu3:许浒栩诩糈醑"
array(1122)="xu4:续序绪蓄叙畜恤絮旭婿酗煦洫溆勖"
array(1123)="xu5:蓿"
array(1124)="xuan1:宣喧轩萱暄谖揎儇煊"
array(1125)="xuan2:旋悬玄漩璇痃"
array(1126)="xuan3:选癣"
array(1127)="xuan4:旋券炫渲绚眩铉泫碹楦镟"
array(1128)="xue1:削靴薛"
array(1129)="xue2:学穴噱踅泶"
array(1130)="xue3:雪鳕"
array(1131)="xue4:血谑"
array(1132)="xun1:熏勋荤醺薰埙曛窨獯"
array(1133)="xun2:寻询巡循旬驯荀峋洵恂郇浔鲟"
array(1134)="xun4:训迅讯逊熏殉巽徇汛蕈浚"
array(1135)="ya1:压雅呀押鸦哑鸭丫垭桠"
array(1136)="ya2:牙涯崖芽衙睚伢岈琊蚜"
array(1137)="ya3:雅瞧匹痖疋"
array(1138)="ya4:亚压讶轧娅迓揠氩砑"
array(1139)="ya5:呀"
array(1140)="yan1:烟燕咽殷焉淹阉腌嫣胭湮阏鄢菸崦恹"
array(1141)="yan2:言严研延沿颜炎阎盐岩铅蜒檐妍筵芫闫阽"
array(1142)="yan3:眼演掩衍奄俨偃魇鼹兖郾琰罨厣剡鼽"
array(1143)="yan4:研验沿厌燕宴咽雁焰艳谚彦焱晏唁砚堰赝餍滟酽谳"
array(1144)="yang1:央泱秧鸯殃鞅"
array(1145)="yang2:洋阳杨扬羊疡佯烊徉炀蛘"
array(1146)="yang3:养仰痒氧"
array(1147)="yang4:样漾恙烊怏鞅"
array(1148)="yao1:要约邀腰夭妖吆幺"
array(1149)="yao2:摇遥姚陶尧谣瑶窑肴侥铫珧轺爻徭繇鳐"
array(1150)="yao3:咬杳窈舀崾"
array(1151)="yao4:要药耀钥鹞曜疟"
array(1152)="ye1:耶噎椰掖"
array(1153)="ye2:爷耶邪揶铘"
array(1154)="ye3:也野冶"
array(1155)="ye4:业夜叶页液咽哗曳拽烨掖腋谒邺靥晔"
array(1156)="yi1:一医衣依椅伊漪咿揖噫猗壹铱欹黟"
array(1157)="yi2:移疑遗宜仪蛇姨夷怡颐彝咦贻迤痍胰沂饴圯荑诒眙嶷"
array(1158)="yi3:以已衣尾椅矣乙蚁倚迤蛾旖苡钇舣酏"
array(1159)="yi4:意义议易衣艺译异益亦亿忆谊抑翼役艾溢毅裔逸轶弈翌疫绎佚奕熠诣弋驿懿呓屹薏噫镒缢邑臆刈羿仡峄怿悒肄佾殪挹埸劓镱瘗癔翊蜴嗌翳"
array(1160)="yin1:因音烟阴姻殷茵荫喑湮氤堙洇铟"
array(1161)="yin2:银吟寅淫垠鄞霪狺夤圻龈"
array(1162)="yin3:引隐饮瘾殷尹蚓吲"
array(1163)="yin4:印饮荫胤茚窨"
array(1164)="ying1:应英鹰婴樱膺莺罂鹦缨瑛璎撄嘤"
array(1165)="ying2:营迎赢盈蝇莹荧萤萦瀛楹嬴茔滢潆荥蓥"
array(1166)="ying3:影颖颍瘿郢"
array(1167)="ying4:应硬映媵"
array(1168)="yo1:育哟唷"
array(1169)="yo5:哟"
array(1170)="yong1:拥庸佣雍臃邕镛墉慵痈壅鳙饔"
array(1171)="yong2:喁"
array(1172)="yong3:永勇涌踊泳咏俑恿甬蛹"
array(1173)="yong4:用佣"
array(1174)="you1:优幽忧悠攸呦"
array(1175)="you2:由游油邮尤犹柚鱿莸尢铀猷疣蚰蝣蝤繇莜"
array(1176)="you3:有友黝酉莠牖铕卣"
array(1177)="you4:有又右幼诱佑柚囿鼬宥侑蚴釉"
array(1178)="yu1:於吁迂淤纡瘀"
array(1179)="yu2:于与余予鱼愚舆娱愉馀逾渔渝俞萸瑜隅揄榆虞禺谀腴竽妤臾欤觎盂窬蝓嵛狳舁雩"
array(1180)="yu3:与语雨予宇羽禹圄屿龉伛圉庾瘐窳俣"
array(1181)="yu4:与语育遇狱雨欲预玉愈谷域誉吁蔚寓豫粥郁喻裕浴御驭尉谕毓妪峪芋昱煜熨燠菀蓣饫阈鬻聿钰鹆鹬蜮"
array(1182)="yuan1:冤渊鸳眢鸢箢"
array(1183)="yuan2:员元原园源圆缘援袁猿垣辕沅媛芫橼圜塬爰螈鼋"
array(1184)="yuan3:远"
array(1185)="yuan4:院愿怨苑媛掾垸瑗"
array(1186)="yue1:约曰"
array(1187)="yue4:说月乐越阅跃悦岳粤钥刖瀹栎樾龠钺"
array(1188)="yun1:晕氲"
array(1189)="yun2:员云匀筠芸耘纭昀郧"
array(1190)="yun3:允陨殒狁"
array(1191)="yun4:员运均韵晕孕蕴酝愠熨郓韫恽"
array(1192)="za1:扎咂匝拶"
array(1193)="za2:杂咱砸"
array(1194)="za3:咋"
array(1195)="zai1:灾哉栽甾"
array(1196)="zai3:载仔宰崽"
array(1197)="zai4:在再载"
array(1198)="zan1:簪糌"
array(1199)="zan2:咱"
array(1200)="zan3:攒拶昝趱"
array(1201)="zan4:赞暂瓒錾"
array(1202)="zan5:咱"
array(1203)="zang1:赃臧锗"
array(1204)="zang3:驵"
array(1205)="zang4:藏脏葬奘"
array(1206)="zao1:遭糟"
array(1207)="zao2:凿"
array(1208)="zao3:早澡枣蚤藻缲"
array(1209)="zao4:造灶躁噪皂燥唣"
array(1210)="ze2:则责泽择咋啧迮帻赜笮箦舴"
array(1211)="ze4:侧仄昃"
array(1212)="zei2:贼"
array(1213)="zen3:怎"
array(1214)="zen4:谮"
array(1215)="zeng1:曾增憎缯罾"
array(1216)="zeng4:赠综缯甑锃"
array(1217)="zha1:查扎咋渣喳揸楂哳吒齄"
array(1218)="zha2:炸扎札喋轧闸铡"
array(1219)="zha3:眨砟"
array(1220)="zha4:炸咋诈乍蜡栅榨柞吒咤痄蚱"
array(1221)="zhai1:摘侧斋"
array(1222)="zhai2:择宅翟"
array(1223)="zhai3:窄"
array(1224)="zhai4:债祭寨砦瘵"
array(1225)="zhan1:占沾粘瞻詹毡谵旃"
array(1226)="zhan3:展斩辗盏崭搌"
array(1227)="zhan4:战站占颤绽湛蘸栈"
array(1228)="zhang1:张章彰璋蟑樟漳嫜鄣獐"
array(1229)="zhang3:长掌涨仉"
array(1230)="zhang4:丈涨帐障账胀仗杖瘴嶂幛"
array(1231)="zhao1:着招朝嘲昭钊啁"
array(1232)="zhao2:着"
array(1233)="zhao3:找爪沼"
array(1234)="zhao4:照赵召罩兆肇诏棹笊"
array(1235)="zhe1:折遮蜇"
array(1236)="zhe2:折哲辙辄谪蛰摺磔蜇"
array(1237)="zhe3:者褶锗赭"
array(1238)="zhe4:这浙蔗鹧柘"
array(1239)="zhe5:着"
array(1240)="zhei4:这"
array(1241)="zhen1:真针珍斟贞侦甄臻箴砧桢溱蓁椹榛胗祯浈"
array(1242)="zhen3:诊枕疹缜畛轸稹"
array(1243)="zhen4:阵镇震圳振赈朕鸩"
array(1244)="zheng1:正争征丁挣症睁徵蒸怔筝铮峥狰钲鲭"
array(1245)="zheng3:整拯"
array(1246)="zheng4:政正证挣郑症怔铮诤帧"
array(1247)="zhi1:之只知指支织氏枝汁掷芝吱肢脂蜘栀卮胝祗"
array(1248)="zhi2:直指职值执植殖侄踯摭絷跖埴"
array(1249)="zhi3:只指纸止址旨徵趾咫芷枳祉轵黹酯"
array(1250)="zhi4:知至制识治志致质智置秩滞帜稚挚掷峙窒炙痔栉桎帙轾贽痣豸陟忮彘膣雉鸷骘蛭踬郅觯"
array(1251)="zhong1:中终钟忠衷锺盅忪螽舯"
array(1252)="zhong3:种肿踵冢"
array(1253)="zhong4:中种重众仲"
array(1254)="zhou1:周州洲粥舟诌啁"
array(1255)="zhou2:轴妯碡"
array(1256)="zhou3:肘帚"
array(1257)="zhou4:皱骤轴宙咒昼胄纣绉荮籀繇酎"
array(1258)="zhu1:诸朱珠猪株蛛洙诛铢茱邾潴槠橥侏"
array(1259)="zhu2:术逐筑竹烛躅竺舳瘃"
array(1260)="zhu3:主属煮嘱瞩拄褚渚麈"
array(1261)="zhu4:住注助著驻祝筑柱铸伫贮箸炷蛀杼翥苎疰"
array(1262)="zhua1:抓挝"
array(1263)="zhua3:爪"
array(1264)="zhuai1:拽"
array(1265)="zhuai3:转"
array(1266)="zhuai4:曳拽嘬"
array(1267)="zhuan1:专砖颛"
array(1268)="zhuan3:转"
array(1269)="zhuan4:传转赚撰沌篆啭馔"
array(1270)="zhuang1:装庄妆桩"
array(1271)="zhuang3:奘"
array(1272)="zhuang4:状壮撞幢僮戆"
array(1273)="zhui1:追锥隹椎骓"
array(1274)="zhui4:坠缀赘惴缒"
array(1275)="zhun1:屯谆肫窀"
array(1276)="zhun3:准"
array(1277)="zhuo1:桌捉卓拙涿焯倬"
array(1278)="zhuo2:着著琢缴灼酌浊濯茁啄斫镯诼禚擢浞"
array(1279)="zi1:资咨滋仔姿吱兹孜谘呲龇锱辎淄髭赀孳粢趑觜訾缁鲻嵫"
array(1280)="zi3:子紫仔梓姊籽滓秭笫耔茈訾"
array(1281)="zi4:自字渍恣眦"
array(1282)="zong1:宗踪综棕鬃枞腙"
array(1283)="zong3:总偬"
array(1284)="zong4:纵粽"
array(1285)="zou1:邹诹陬鄹驺鲰"
array(1286)="zou3:走"
array(1287)="zou4:奏揍"
array(1288)="zu1:租菹"
array(1289)="zu2:足族卒镞"
array(1290)="zu3:组祖阻诅俎"
array(1291)="zuan1:钻躜"
array(1292)="zuan3:纂缵"
array(1293)="zuan4:赚钻攥"
array(1294)="zui1:堆"
array(1295)="zui3:嘴咀觜"
array(1296)="zui4:最罪醉蕞"
array(1297)="zun1:尊遵樽鳟"
array(1298)="zun3:撙"
array(1299)="zuo1:作嘬"
array(1300)="zuo2:作昨琢笮"
array(1301)="zuo3:左佐撮"
array(1302)="zuo4:作做坐座凿柞怍胙阼唑祚酢 "

Function spell(str)
for k=1 to len(str)
str1=mid(str,k,1)
if asc(str1)>0 then
spell=spell&str1&"&nbsp;&nbsp;"
else
for i=0 to 1302
for j=1 to len(array(i))
arraystr=mid(array(i),j,1)
if asc(str1)<0 and arraystr=str1 then
spellstr=split(array(i),":")
spell=spell&spellstr(0)&str1&"&nbsp;&nbsp;"
exit for
end if
next
next
end if
next
End Function

This page is powered by Blogger. Isn't yours?