2005年06月28日


http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=19240

这些天开发一个项目,服务器是tomcat,操作系统是xp,采用的是MVC架构,模式是采用Facade模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多网友的文章和意见,总算是搞定。但是好记性不如烂笔杆,所以特意记下,以防止自己遗忘,同时也给那些遇到同样问题的人提供一个好的参考途径:
(一)    JSP页面上是中文,但是看的是后是乱码:
解决的办法就是在JSP页面的编码的地方<%@ page language="java" contentType="text/html;charset=GBK" %>,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认
(二)    当用Request对象获取客户提交的汉字代码的时候,会出现乱码:
解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

/**
 * Example filter that sets the character encoding to be used in parsing the
 * incoming request
 */
public class SetCharacterEncodingFilter implements Filter {

    /**
     * Take this filter out of service.
     */
    public void destroy() {
    }
    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)throws IOException, ServletException {

    request.setCharacterEncoding("GBK");

    // 传递控制到下一个过滤器
    chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。
还有就是对含有汉字字符的信息进行处理,处理的代码是:
package dbJavaBean;

public class CodingConvert
{   
 public CodingConvert()
 {
  //
 }
 public String toGb(String uniStr){
     String gbStr = "";
     if(uniStr == null){
   uniStr = "";
     }
     try{
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte,"GB2312");
     }
  catch(Exception ex){
    }
     return gbStr;
 }
   
 public String toUni(String gbStr){
     String uniStr = "";
     if(gbStr == null){
   gbStr = "";
     }
     try{
   byte[] tempByte = gbStr.getBytes("GB2312");
   uniStr = new String(tempByte,"ISO8859_1");
     }catch(Exception ex){
    }
    return uniStr;
 }
}
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。
(三)    在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上:如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了:
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
也是不起作用的,返回的中文还是乱码!!!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同样,在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的,改成get方法依旧不行。
由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。
解决的办法是:
1) 打开tomcat的server.xml文件,找到区块,加入如下一行: 
URIEncoding=”GBK” 
完整的应如下: 
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 

2)重启tomcat,一切OK。
需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是:这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况,如果不行的话就换别的字符集。

(四)    JSP页面上有中文,按钮上面也有中文,但是通过服务器查看页面的时候出现乱码:
     解决的办法是:首先在JSP文件中不应该直接包含本地化的消息文本,而是应该通过<bean:message>标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中,这个文件放在WEB-INF/classes/*下,例如我在页面里有姓名,年龄两个label,我首先就是要建一个Application.properties,里面的内容应该是name=”姓名” age=”年龄”,然后我把这个文件放到WEB-INF/classes/properties/下,接下来根据Application.properties文件,对他进行编码转化,创建一个中文资源文件,假定名字是Application_cn.properties。在JDK中提供了native2ascii命令,他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录,在DOS环境中执行一下命令,将生成按GBK编码的中文资源文件Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件:name=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配置:<message-resources parameter="properties.Application_cn"/>。到这一步,基本上完成了一大半,接着你就要在JSP页面上写<%@ page language="java" contentType="text/html;charset=GBK" %>,到名字的那个label是要写<bean:message key=”name”>,这样的化在页面上出现的时候就会出现中文的姓名,年龄这个也是一样,按钮上汉字的处理也是同样的。
(五)    写入到数据库是乱码:
解决的方法:要配置一个filter,也就是一个Servelet的过滤器,代码如同第二种时候一样。
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK,这样保证到数据库中的代码是不是乱码。
如果你是通过数据源链接的化你不能按照这样的写法了,首先你就要写在配置文件中,在tomcat 5.0.19中配置数据源的地方是在C:\Tomcat 5.0\conf\Catalina\localhost这个下面,我建立的工程是workshop,放置的目录是webapp下面,workshop.xml的配置文件如下:
<!– insert this Context element into server.xml –>

<Context path="/workshop" docBase="workshop" debug="0"
reloadable="true" >

  <Resource name="jdbc/WorkshopDB"
               auth="Container"
               type="javax.sql.DataSource" />

  <ResourceParams name="jdbc/WorkshopDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

    
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>

      <parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value></value>
    </parameter>

    <!– Class name for mm.mysql JDBC driver –>
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
</parameter>
   <parameter>
      <name>url</name>
 <value><![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK]]></value>
    </parameter>
  </ResourceParams>

</Context>
粗体的地方要特别的注意,和JDBC直接链接的时候是有区别的,如果你是配置正确的化,当你输入中文的时候到数据库中就是中文了,有一点要注意的是你在显示数据的页面也是要用<%@ page language="java" contentType="text/html;charset=GBK" %>这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的,写了一个Form的时候把他改成了一个jsp,这样有一个地方要注意了,那就是在Dreamver中Action的提交方式是request的,你需要把他该过来,因为在jsp的提交的过程中紧紧就是POST和GET两种方式,但是这两种方式提交的代码在编码方面还是有很大不同的,这个在后面的地方进行说明。3

以上就是我在开发系统中解决中文的问题,不知道能不能解决大家的问题,时间匆忙,没有及时完善,文笔也不是很好,有些地方估计是词不达意。大家可以给我意见,希望能共同进步。


posted @ 2005-01-29 01:32 moson 阅读(27) | 评论 (0)编辑 收藏
 
1.字节和unicode
    java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。char是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 
public static ByteToCharConverter getDefault(); 
public static ByteToCharConverter getConverter(String encoding); 
如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用8859_1。
byte ——〉char:
 "你"的gb码是:0xc4e3 ,unicode是0×4f60
  String encoding = "gb2312";
  byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
  ByteToCharConverter converter = ByteToCharConverter.getConverter(encoding);
  char c[] = converter.convertAll(b);
  for (int i = 0; i < c.length; i++) {
      System.out.println(Integer.toHexString(c[i]));
  }
 结果是什么?0×4f60
 如果encoding ="8859_1",结果又是什么?0×00c4,0×00e3
 如果代码改为
 byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
 ByteToCharConverter converter = ByteToCharConverter. getDefault();
 char c[] = converter.convertAll(b);
 for (int i = 0; i < c.length; i++) {
    System.out.println(Integer.toHexString(c[i]));
 }
 结果将又是什么?根据平台的编码而定。

 char ——〉byte:
    String encoding = "gb2312";
    char c[] = {‘\u4f60′};
    CharToByteConverter converter = CharToByteConverter.getConverter(encoding);
    byte b[] = converter.convertAll(c);
    for (int i = 0; i < b.length; i++) {
       System.out.println(Integer.toHexString(b[i]));
    }
结果是什么?0×00c4,0×00e3
如果encoding ="8859_1",结果又是什么?0×3f
如果代码改为
String encoding = "gb2312";
    char c[] = {‘\u4f60′};
    CharToByteConverter converter = CharToByteConverter.getDefault();
    byte b[] = converter.convertAll(c);
    for (int i = 0; i < b.length; i++) {
       System.out.println(Integer.toHexString(b[i]));
    }
结果将又是什么?根据平台的编码而定。
很多中文问题就是从这两个最简单的类派生出来的。而却有很多类不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding了,直接用default的encoding,这就给我们移植带来了很多困难。

2.utf-8
utf-8是和unicode一一对应的,其实现很简单
7位的unicode: 0 _ _ _ _ _ _ _ 
11位的unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _ 
16位的unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
21位的unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
大多数情况是只使用到16位以下的unicode: 
"你"的gb码是:0xc4e3 ,unicode是0×4f60
    0xc4e3的二进制:
          1100 ,0100 ,1110 ,0011
由于只有两位我们按照两位的编码来排,但是我们发现这行不通,因为第7位不是0因此,返回"?"
    0×4f60的二进制:
               0100 ,1111 ,0110 ,0000
         我们用utf-8补齐,变成:
               1110 ,0100 ,1011 ,1101 ,1010 ,0000
         e4–bd– a0
         于是返回:0xe4,0xbd,0xa0。

3.string和byte[]
string其实核心是char[],然而要把byte转化成string,必须经过编码。string.length()其实就是char数组的长度,如果使用不同的编码,很可能会错分,造成散字和乱码。
例如:
String encoding = “”;
byte [] b={(byte)’\u00c4′,(byte)’\u00e3′}; 
String str=new String(b,encoding);  
如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字这个问题在处理分页是经常发生 。

4.Reader,Writer / InputStream,OutputStream
Reader和Writer核心是char,InputStream和OutputStream核心是byte。但是Reader和Writer的主要目的是要把char读/写InputStream/OutputStream。
例如:
文件test.txt只有一个"你"字,0xc4,0xe3
String encoding = "gb2312";
    InputStreamReader reader = new InputStreamReader(new FileInputStream(
        "text.txt"), encoding);
    char c[] = new char[10];
    int length = reader.read(c);
    for (int i = 0; i < length; i++) {
       System.out.println(c[i]);
    }
结果是什么?你
如果encoding ="8859_1",结果是什么???两个字符,表示不认识。
反过来的例子自己做。

5.我们要对java的编译器有所了解
javac ?encoding
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。
java的编译器实际上是调用sun.tools.javac.main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后把用utf-8形式编译成class文件。
例子代码:
String str = "你";
    FileWriter writer = new FileWriter("text.txt");
    write.write(str);
    writer.close();

如果用gb2312编译,你会找到e4 bd a0的字段 ;
如果用8859_1编译, 00c4 00e3的二进制: 
0000,0000 ,1100,0100 ,0000,0000 ,1110,0011
因为每个字符都大于7位,因此用11位编码: 
1100,0001,1000,0100,1100,0011,1010,0011 
c1– 84– c3–  a3 
你会找到c1 84 c3 a3 。

但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:
样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
  (1).  zhclass在中文平台上执行ok,但是在英文平台上不行 
  (2).    enclass在英文平台上执行ok,但是在中文平台上不行
原因:
  (1).    在中文平台上编译后,其实str在运行态的char[]是0×4f60, 在中文平台上运行,filewriter的缺省编码是gb2312,因此 chartobyteconverter会自动用调用gb2312的converter,把str转化成byte输入到fileoutputstream中,于是0xc4,0xe3放进了文件。 
但是如果是在英文平台下,chartobyteconverter的缺省值是8859_1, filewriter会自动调用8859_1去转化str,但是他无法解释,因此他会输出"?"
  (2).    在英文平台上编译后,其实str在运行态的char[]是0×00c4 0×00e3, 在中文平台上运行,中文无法识别,因此会出现??;
在英文平台上,0×00c4–>0xc4,0×00e3->0xe3,因此0xc4,0xe3被放进了文件。

6.    其它原因:<%@ page contentType="text/html; charset=GBK" %>
设置浏览器的显示编码,如果response的数据是utf8编码,显示将是乱码,但是乱码和上述原因还不一样。

7.    发生编码的地方
    从数据库到java程序 byte——〉char
    从java程序到数据库 char——〉byte
    从文件到java程序 byte——〉char
    从java程序到文件 char——〉byte
    从java程序到页面显示 char——〉byte
    从页面form提交数据到java程序byte——〉char
    从流到java程序byte——〉char
    从java程序到流char——〉byte

谢志钢的解决方法:
我是使用配置过滤器的方法解决中文乱码的:

<web-app>
  <filter>
    <filter-name>RequestFilter</filter-name>
    <filter-class>net.golden.uirs.util.RequestFilter</filter-class>
    <init-param>
      <param-name>charset</param-name>
      <param-value>gb2312</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>RequestFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
</web-app>


  public void doFilter(ServletRequest req, ServletResponse res,
                       FilterChain fChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession();
    String userId = (String) session.getAttribute("userid");
req.setCharacterEncoding(this.filterConfig.getInitParameter("charset")); // 设置字符集?
实际上是设置了byte ——〉char的encoding
    try {
      if (userId == null || userId.equals("")) {
        if (!request.getRequestURL().toString().matches(
            ".*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$")) {
          session.invalidate();
          response.sendRedirect(request.getContextPath() +
                                "/uirs/logon/logon.jsp");
        }
      }
      else { // 看看是否具有信息上报系统的权限
        if (!net.golden.uirs.util.UirsChecker.check(userId, "信息上报系统",
            net.golden.uirs.util.UirsChecker.ACTION_DO)) {
          if (!request.getRequestURL().toString().matches(
              ".*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$")) {
            response.sendRedirect(request.getContextPath() +
                                  "/uirs/logon/logonController.jsp");
          }
        }
      }
    }
    catch (Exception ex) {
      response.sendRedirect(request.getContextPath() +
                            "/uirs/logon/logon.jsp");
    }
    fChain.doFilter(req, res);
  }





posted @ 2005-01-29 01:20 moson 阅读(40) | 评论 (0)编辑 收藏

2005年1月28日

明海棠文集之日期时间1.0

——–它不是原创,是一种思念

Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象。学习日期, 日期格式, 日期的解析和日期的计算。 

我们将讨论下面的类: 

1、  具体类(和抽象类相对)java.util.Date 

2、  抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat 

3、  抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar 

具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.

1.   java.util.Date及其格式化
Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数. 

1.1. 创建java.util.Date
Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间. 
import java.util.Date; 

public class DateExample1 { 

public static void main(String[] args) { 

// Get the system date/time 

Date date = new Date(); 

// 打印出具体的年,月,日,小时,分钟,秒钟以及时区

System.out.println(date.getTime()); 

}   



在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期. 

//1年前日期

   java.util.Date myDate=new java.util.Date();  

   long myTime=(myDate.getTime()/1000)-60*60*24*365;

   myDate.setTime(myTime*1000);

   String mDate=formatter.format(myDate);

//明天日期

   myDate=new java.util.Date(); 

   myTime=(myDate.getTime()/1000)+60*60*24;

   myDate.setTime(myTime*1000);

   mDate=formatter.format(myDate);

//两个时间之间的天数

   SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

   java.util.Date date= myFormatter.parse("2003-05-1"); 

   java.util.Date mydate= myFormatter.parse("1899-12-30");

   long  day=(date.getTime()-mydate.getTime())/(24*60*60*1000);

//加半小时

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date date1 = format.parse("2002-02-28 23:16:00");

long Time=(date1.getTime()/1000)+60*30;

date1.setTime(Time*1000);

String mydate1=formatter.format(date1);

//年月周求日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");

java.util.Date date2= formatter2.parse("2003-05 5 星期五"); 

SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");

String mydate2=formatter3.format(date2);

//求是星期几

mydate= myFormatter.parse("2001-1-1");

SimpleDateFormat formatter4 = new SimpleDateFormat("E");

String mydate3=formatter4.format(mydate);

 
 

 

1.2. Date格式化
能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat。那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如何才format 就派得上用场了. 

// 我们能不能用下面的代码构件出 2001/8/8 8:8
    import java.io.*;
    import java.util.*;
 
    public class WhatIsDate
    {
        public static void main(String[] args) {
            Date date = new Date(2001, 8, 8, 8, 8, 8);
            System.out.println(date);
        }
    }
 

Java 的编译器竟然报如下信息 (Sun JDK1.3, Windows 2000 中文下)

注意:
WhatIsDate.java 使用或覆盖一个不鼓励使用的API。
注意:
使用-deprecation重新编译,以得到详细信息。!
 

那么 Date 对象究竟是为了满足哪个需求呢?看来它不是用来实现基于年/月/日小时:分钟 的时间表述。我们查看 Java 的文档,我们看到有 getTime() 方法,它返回的竟然是一个 long 值。

文档进一步又告诉我们这个值代表了当前系统的时间离1970/1/1 0:0 的毫秒差,而且是在 GMT 时区下(也被称为 EPOC)。如果我们指定的时间是在此之前的,那它将返回一个负数值。

这个发现让我们对 Date 对象有了一个全新的认识-Date 存放的是与 EPOC 的偏差值。换而言之我们也可通过 long 类型来表示时间?对了,这个猜想是得到了 Java 的支持:

   // 第二种获得当前时间的方法
    long dateInMilliSeconds = System.currentTimeMillis();
    // 这时候打印出的只是一串数字而已
    System.out.println(dateInMilliSeconds);
 

对程序执行效率敏感的程序员可以发现这个方法只是生成一个 Java 的原始类型 (primitive type) long, 不需要实例化一个对象。因此如果我们对时间的处理只是在内部进行时,可以用 long 来代替 Date 对象。

最典型的应用就是在一段代码开始和结束时,分别获得系统当前的时间,然后计算出代码执行所需的时间(微秒级)。

   long start = System.currentTimeMillis();
    // 代码段
    System.out.println("需要 "+(System.currentTimeMillis()-start)+" 微秒");
 

那么当我们要把这个 long 值已更为友好的表现形式显示处理的时候,我们可以用它来构造 Date 对象:

Date date = new Date(dateInMilliSeconds);

System.out.println(date);
 

我们看到了在 Java 中对时间最为基本的表示,有通过对EPOC 的偏差值进行处理。Date 对象是对它的一个对象的封装。我们同时也看到了,在现时世界中我们对时间的描述通常是通过"某年某月某日某时某分"来定义的。Date 的显示(实际上是 toString() 方法)描述了这些信息,但 Java 并不建议我们用这种方式直接来构件 Date 对象。因此我们需要找出哪个对象可以实现这个需求。这就是我们下面就要讲述的 Calendar 对象的功能。

在我们进一步研究 Calendar 之前,请记住 Date 只是一个对 long 值(基于 GMT 时区)的对象封装。它所表现出来的年/月/日小时:分钟时区的时间表述,只是它的 toString() 方法所提供的。千万不要为这个假象所迷惑。

假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作: 

import java.text.SimpleDateFormat; 

import java.util.Date; 

public class DateExample2 { 

public static void main(String[] args) { 

SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); Date date = new Date(); 

System.out.println(bartDateFormat.format(date)); 

}

}
 

只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示. 

1.3. 文本数据解析成日期对象 
假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象. 

通过parse()方法,DateFormat能够以一个字符串创立一个Date对象。这个方法能抛出ParseException异常,所以你必须使用适当的异常处理技术。

例子程序: 

import java.text.SimpleDateFormat; 

import java.util.Date; 

public class DateExample3 { 

public static void main(String[] args) { 

// Create a date formatter that can parse dates of 

// the form MM-dd-yyyy. 

SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy"); 

// Create a string containing a text date to be parsed. 

String dateStringToParse = "9-29-2001"; 

try { 

// Parse the text version of the date. 

// We have to perform the parse method in a 

// try-catch construct in case dateStringToParse 

// does not contain a date in the format we are expecting. 

Date date = bartDateFormat.parse(dateStringToParse); 

// Now send the parsed date as a long value 

// to the system output. 

System.out.println(date.getTime()); 

}catch (Exception ex) { 

System.out.println(ex.getMessage()); 

}




 

1.4. 使用标准的日期格式化过程 
既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式. 

import java.text.DateFormat; 

import java.util.Date; 

public class DateExample4 { 

public static void main(String[] args) { 

Date date = new Date(); 

DateFormat shortDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.SHORT, DateFormat.SHORT); 

DateFormat mediumDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.MEDIUM, DateFormat.MEDIUM); 

DateFormat longDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.LONG, DateFormat.LONG); 

DateFormat fullDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.FULL, DateFormat.FULL); 

System.out.println(shortDateFormat.format(date)); System.out.println(mediumDateFormat.format(date)); System.out.println(longDateFormat.format(date)); System.out.println(fullDateFormat.format(date)); 





注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释. 

运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容: 
9/29/01 8:44 PM 
Sep 29, 2001 8:44:45 PM 
September 29, 2001 8:44:45 PM EDT 
Saturday, September 29, 2001 8:44:45 PM EDT 

2.   Calendar 日历类 
首先请记住 Calendar 只是一个抽象类, 也就是说你无法直接获得它的一个实例,换而言之你可以提供一个自己开发的 Calendar 对象。

那究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?

比如有:

月份的定义 - 阳`(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天,每周的第一天 - 阳(公)历星期日是第一天;阴(农)历,星期一是第一天

实际上,在历史上有着许多种纪元的方法。它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是 "Gregorian Calendar"。也就是我们在讲述年份时常用 "公元几几年"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。Java 本身提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致)。

下面的代码可以证明这一点:

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendar
    {
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
            if (calendar instanceof GregorianCalendar)
                System.out.println("It is an instance of GregorianCalendar");
        }
    }
 

 

Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。

Calendar 与 Date 的转换非常简单:

   Calendar calendar = Calendar.getInstance();
    // 从一个 Calendar 对象中获取 Date 对象
    Date date = calendar.getTime();
    // 将 Date 对象反应到一个 Calendar 对象中,
    // Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
    // 所以我们必需先获得一个实例,然后设置 Date 对象
    calendar.setTime(date);
 
 

 

Calendar 对象在使用时,有一些值得注意的事项:

1. Calendar 的 set() 方法

set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值

field 的定义在 Calendar 中

set(int year, int month, int day, int hour, int minute, int second) 但没有set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。

calendar.set(Calendar.MONTH, 7);

我们通常需要在程序逻辑中将它清为 0,否则可能会出现下面的情况:

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendarWrite
    {
        public static void main(String[] args) throws Exception{
            ObjectOutputStream out =
                new ObjectOutputStream(
                    new FileOutputStream("calendar.out"));
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0, 0);
            out.writeObject(cal1);
            Calendar cal2 = Calendar.getInstance();
            cal2.set(2000, 7, 1, 0, 0, 0);
            cal2.set(Calendar.MILLISECOND, 0);
            out.writeObject(cal2);
            out.close();
        }
    }
 

我们将 Calendar 保存到文件中

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendarRead
    {
        public static void main(String[] args) throws Exception{
            ObjectInputStream in =
                new ObjectInputStream(
                    new FileInputStream("calendar.out"));
            Calendar cal2 = (Calendar)in.readObject();
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0, 0);
            if (cal1.equals(cal2))
                System.out.println("Equals");
            else
                System.out.println("NotEqual");
            System.out.println("Old calendar "+cal2.getTime().getTime());
            System.out.println("New calendar "+cal1.getTime().getTime());
            cal1.set(Calendar.MILLISECOND, 0);
            cal2 = (Calendar)in.readObject();
            if (cal1.equals(cal2))
                System.out.println("Equals");
            else
                System.out.println("NotEqual");
            System.out.println("Processed Old calendar "+cal2.getTime().getTime());
            System.out.println("Processed New calendar "+cal1.getTime().getTime());
        }
    }
 

然后再另外一个程序中取回来(模拟对数据库的存储),但是执行的结果是:

NotEqual
Old calendar 965113200422 <———— 最后三位的MilliSecond与当前时间有关
New calendar 965113200059 <———–/
Equals
Processed Old calendar 965113200000
Processed New calendar 965113200000
 
 

另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:

Calendar cal1 = Calendar.getInstance();
    cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
    cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31,也就是 2000-10-1
    cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1,那么现在的结果就该是 2000-10-30
    System.out.println(cal1.getTime()); //输出的是2000-9-30,说明 Calendar 不是马上就刷新其内部的记录
 

在 Calendar 的方法中,get() 和 add() 会让 Calendar 立刻刷新。Set() 的这个特性会给我们的开发带来一些意想不到的结果。我们后面会看到这个问题。

2. Calendar 对象的容错性,Lenient 设置

我们知道特定的月份有不同的日期,当一个用户给出错误的日期时,Calendar 如何处理的呢?

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendar
    {
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 1, 32, 0, 0, 0);
            System.out.println(cal1.getTime());
            cal1.setLenient(false);
            cal1.set(2000, 1, 32, 0, 0, 0);
            System.out.println(cal1.getTime());
        }
    }
 

它的执行结果是:

   Tue Feb 01 00:00:00 PST 2000
    Exception in thread "main" java.lang.IllegalArgumentException
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)
        at java.util.Calendar.updateTime(Calendar.java:1508)
        at java.util.Calendar.getTimeInMillis(Calendar.java:890)
        at java.util.Calendar.getTime(Calendar.java:871)
        at WhatIsCalendar.main(WhatIsCalendar.java:12)
 

当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。

3. 不稳定的 Calendar

我们知道 Calendar 是可以被 serialize 的,但是我们要注意下面的问题

   import java.io.*;
    import java.util.*;
 
    public class UnstableCalendar implements Serializable
    {
 
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0 , 0);
            cal1.set(Calendar.MILLISECOND, 0);
            ObjectOutputStream out =
                new ObjectOutputStream(
                new FileOutputStream("newCalendar.out"));
            out.writeObject(cal1);
            out.close();
            ObjectInputStream in =
                new ObjectInputStream(
                new FileInputStream("newCalendar.out"));
            Calendar cal2 = (Calendar)in.readObject();
            cal2.set(Calendar.MILLISECOND, 0);
            System.out.println(cal2.getTime());
        }
    }
 

 

运行的结果竟然是: Thu Jan 01 00:00:00 PST 1970

它被复原到 EPOC 的起始点,我们称该 Calendar 是处于不稳定状态。这个问题的根本原因是 Java 在 serialize GregorianCalendar 时没有保存所有的信息,所以当它被恢复到内存中,又缺少足够的信息时,Calendar 会被恢复到 EPOCH 的起始值。Calendar 对象由两部分构成:字段和相对于 EPOC 的微秒时间差。字段信息是由微秒时间差计算出的,而 set() 方法不会强制 Calendar 重新计算字段。这样字段值就不对了。

下面的代码可以解决这个问题:

   import java.io.*;
    import java.util.*;
 
    public class StableCalendar implements Serializable
    {
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0 , 0);
            cal1.set(Calendar.MILLISECOND, 0);
            ObjectOutputSt





简介

在计算机程序中精确的处理日期是困难的。不仅有显而易见的(英语: January, 法语: Janvier, 德语: Januar, 等)国际化需求, 而且得考虑不同的日期系统(并非所有的文化都用基督耶稣的生日作为纪年的开始)。如有高精度或非常大规模的时间需要被处理, 就有额外的方面需要被注意,比如闰秒或时间系统的变化。(公历(阳历, 格里高利历法)在西方被普遍接受是在1582年,但并非所有的国家在同一天接受!)

尽管有关于闰秒, 时区, 夏令时, 阴历的问题, 度量时间却是一个非常简单的概念: 时间的进行是线性的很容易被忽略。一旦时间轴的区域被定义, 任何时间点被从起点时间的流逝就可以确定。这和地理位置或当地时区是独立的 – 对任意指定的时间点, 对任意地区, 从起点的过程是相同的(忽略相对论的矫正)。


——————————————————————————–

可当我们试图根据某些日历解释这一时间点的时候困难来了, 比如, 根据月, 日, 或者年来表示它。在这一步上地理信息变得相关: 在时间上的同一个点对应不同的天的某一时间, 依赖于区域 (比如: 时区)。基于解释日期的修正经常是必要的(今天一个月以后是哪一天?) 并且增加了额外的困难: 上溢和下溢(12月15号的后一个月是下一年), 且不明确(1月30号后的一个月是哪一天?).

在最初的JDK 1.0, 一个时间点, 通过把它解释为java.util.Date类, 它被计算在一起来表示. 虽然相对容易处理, 但它并不支持国际化; 从JDK 1.1.4 或JDK 1.1.5, 多样的负责处理日期的职责被分配到以下类中:

java.util.Date
代表一个时间点.

abstract java.util.Calendar
java.util.GregorianCalendar extends java.util.Calendar
解释和处理Date.

abstract java.util.TimeZone
java.util.SimpleTimeZone extends java.util.TimeZone
代表一个任意的从格林威治的偏移量, 也包含了适用于夏令时(daylight savings rules)的信息.

abstract java.text.DateFormat extends java.text.Format
java.text.SimpleDateFormat extends java.text.DateFormat
变形到格式良好的, 可打印的String, 反之亦然.

java.text.DateFormatSymbols
月份, 星期等的翻译, 作为从Locale取得信息的一种替代选择.

java.sql.Date extends java.util.Date
java.sql.Time extends java.util.Date
java.sql.Timestamp extends java.util.Date
代表时间点, 同时为了在sql语句中使用也包含适当的格式.



注意: DateFormat 和相关的类在java.text.*包. 所有的java.sql.*包中日期处理相关类继承了java.util.Date类. 所有的其它类在java.util.*包中.

这些"新"类来自三个分离的继承层次, 其顶层类(Calendar, TimeZone, and DateFormat)是抽象的. 针对每一个抽象类, Java标准类库提供了一个具体的实现.

java.util.Date

类java.util.Date代表一个时间点. 在许多应用中, 此种抽象被称为"TimeStamp." 在标准的Java类库实现中, 这个时间点代表Unix纪元January 1, 1970, 00:00:00 GMT开始的毫秒数. 因而概念上来说, 这个类是long的简单封装.

根据此种解释, 类中仅有的没有过期的(除了那些毫秒数的get和set方法)是那些排序方法.

这个类依靠System.currentTimeMillis() 来取得当前的时间点. 因此它的准确度和精度由System的实现和它所调用底层(本质是操作系统)决定.

The java.util.Date API

在最初的 Date类使用中名字和约定引起了无尽的混淆. 然而用0-11计算月, 从1900计算年的决定模仿了C标准类库的习惯, 调用函数 getTime()返回起始于Unix纪元的毫秒数和 getDate()返回星期的决定显然是Java类设计者自己的.


java.util.Calendar

语义

Calendar代表一个时间点(一个"Date"), 用以在特定的区域和时区适当的解释器. 每一个Calendar 实例有一个包含了自纪元开始的代表时间点的long变量.

这意味着Calendar 不是一个(无状态) 变换者或解释器, 也不是一个修改dates的工厂. 它不支持如下方式:

Month Interpreter.getMonth(inputDate) or

Date Factory.addMonth(inputDate)

Instead, Calendar实例必须被初始化到特定的Date. 此Calendar实例可以被修改或查询interpreted属性.

奇怪的是, 此类的instances 总是被初始化为当前时间. 获得一个初始化为任意Date的Calendar 实例是不可能的—API强制程序员通过一系列的在实例上的方法调用, 比如setTime(date)来显式的设置日期.

访问Interpreted 字段和类常量

Calendar类遵从一不常用的方式来访问interpreted date实例的单个字段. 而不是提供一些dedicated属性 getters和setters方法(比如getMonth()), 它仅提供了一个, 使用一个标示作为参数来获取请求的属性的方法:

int get(Calendar.MONTH) 等等.

注意这个函数总是返回一个int!

这些字段的标示符被定义为Calendar类的public static final变量. (这些identifiers是raw的整数, 没有被封装为一个枚举抽象.)

除了对应这些字段标示(键值), Calendar 类定义了许多附加的public static final 变量来保存这些字段的值. 因此, 为测试某一特定date (由Calendar 的实例calendar表示) 是否在一年的第一个月, 会有像如下的代码:

if (calendar.get(Calendar.MONTH) == Calendar.JANUARY) {…}

注意月份被叫做 JANUARY, FEBRUARY, 等等, 不管location(相对更中性的名字比如: MONTH_1, MONTH_2, 等等). 也有一个字段UNDECIMBER, 被一些(非公历(阳历, 格里高利历法))日历使用, 代表一年的第十三个月.

不幸的是, 键值和值既没有通过名字也没分组成嵌套的inerface来区分.

处理

Calendar提供了三种办法来修改当前实例代表的日期: set(), add(), 和roll(). set()方法简单的设置特定的字段为期望的值. add() 和 roll() 的不同在于它们处理over- and underflows: add() 传递变更到"较小"或"较大"的字段, 而roll()不影响其它字段. 比如, 当给代表12月15号的Calendar实例增加一个月, 当add()使用年会增加, 但使用roll()不会发生任何变化. 为每一种case对应一个函数的决定的动机是, 它们可能在GUI中不同的使用情形.

由于Calendar的实现的方式, 它包含冗余的数据: 所有的字段都可以从给定的时区和纪元开始的毫秒数计算出来,反之亦然. 这个类为这些操作分别定义了抽象方法computeFields()和computeTime(), 又定义了complete()方法执行完全的来回旅程. 因为有两套冗余的数据, 这两套数据可能不同步. 根据类的JavaDoc文档, 当发生变更的时候依赖的数据以lazily 的方式重新计算. 当重新计算需要的时候, 子类必须维护一套脏数据标志作为符号.


——————————————————————————–

实现的Leakage

对于一个”新”的日期相关处理类, 不得不说实现的细节在某种程度上被泄漏到了API中. 在这点上, 这是它们有意用作基类的自定义开发的反映, 但它也偶然看出是不充分清晰设计一个公共接口的结果.Calendar 抽象是否维护两个冗余数据集合完全是一个实现的细节, 因而应当对客户类隐藏. 这也包括打算通过继承来重用此类.


附加的功能

Calendar基类提供的附加功能分成三类. 几个静态的工厂方法来获得用任意时区和locales初始化的实例. 如前面提到的, 所有以这种方式获得实例已经被初始化为当前时间. 没有工厂方法被提供来获得初始化为任意时间点的实例.

第二组包含before(Object)和after(Object)方法. 它们接受Object类型的参数, 因而允许这些方法被子类以任意类型的参数覆盖掉.

最后, 有许多附加的方法来获得设置附加的属性, 比如当前的时区. 当中有几个用以查询特定字段在当前Calendar实现下的可能和实际的最大、最小值.



java.util.GregorianCalendar



GregorianCalendar 是仅有可用的Calendar的子类. 它提供了基础Calendar抽象适合于根据在西方的习惯解释日期的实现. 它增加了许多public的构造函数, 也有针对于Gregorian Calendars的方法, 比如isLeapYear().



java.util.TimeZone 和 java.util.SimpleTimeZone



TimeZone类和其子类是辅助类, 被Calendar用以根据选择的时区来解释日期. 按字面意思来说, 一个时区表示加到GMT上后到当前时区的一定的偏移. 显然, 这个偏移在夏令时有效的时候会发生变化. 因而为了计算对于给定日期和时间的本地时间, TimeZone抽象不仅需要明白当DST有效时的额外偏移, 而且还需明白什么时候DST有效的规则.



抽象基类TimeZone 提供了基本的处理"raw"(没有考虑夏令时)实际偏移(用毫秒数!)的方法, 但任何关于DST规则的功能实现被留给了子类, 比如SimpleTimeZone. 后者提供了许多方法来指定控制DST开始和结束的规则, 比如在一个月中明确的某一天或某一天随后的周几. 每一个TimeZone 有一个可读的, 本地无关的显示名. 显示名以两种风格: LONG和SHORT呈现.

星期的开始?

Calendar的文档投入了相当的文字来正确的计算月或年中的weeks. weekday 被认为是一周的开始在因国家的不同而不同. 在美国, 一周通常被认为从周日开始. 在部分欧洲国家一周从周一开始结束于周日.这将影响到哪一周被认为是在一年(或月)第一个完整的周, 和计算一年的周数.


时区由一标示字符串明确的决定. 基类提供静态方法String[] getAvailableIDs()来获得所有已知安装(JDK内带有)的标准时区. (在我的安装内有557个, JDK1.4.1) 假如需要, JavaDoc 定义了严格的建立自定义时区标示符的语法. 也提供了静态工厂方法用以获取 — 指定ID或缺省的当前时区的TimeZone 实例. SimpleTimeZone提供了一些公有的构造函数, 奇怪的是对于一个抽象类, 如TimeZone. (JavaDoc 写到 "子类构造函数调用." 显然, 应该声明为protected.)

java.text.DateFormat

尽管Calendar和相关类处理locale-specific日期的解释,仍有DateFormat 类辅助日期和(人类)可阅读字符串之间的变换. 表示一个时间点时, 会出现附加的本地化问题: 不仅仅在语言, 而且日期格式是地区独立的(美国: Month/Day/Year,德国: Day.Month.Year, 等等). DateFormat 尽力地为程序员管理这些不同.

抽象基类DateFormat不需要(且不允许) 任意的, 程序员定义的日期格式. 作为替代, 它定义了四种格式化风格: SHORT, MEDIUM, LONG, 和FULL (以冗余增加的顺序).对一给定locale和style, 程序员可依靠此类获取适当的日期格式.

抽象基类DateFormat 没有定义静态方法来完成文本和日期之间的格式化和转换. 作为替代, 它定义了几个静态工厂方法来获取被初始化为给定locale和选定style的实例. 既然标准的格式化总是包含日期和时间, 附加工厂方法可用来获取仅处理时间或日期部分的实例. String format(Date)和Date parse(String) 方法然后执行变形. 注意具体的子类可以选择打破这种习惯.

在其内部使用, 解释日期的Calendar对象是可访问和修改的, TimeZone和NumberFormat对象也同样. 然而, 一旦DateFormat 被实例化locale和style就不能再修改.

亦有可用的(抽象的)用以拼接的字符串解析和格式化的方法, 分别接受额外的ParsePosition或FieldPosition参数. 这些方法的每一个都有两个版本. 一个接受或返回Date实例另一个接受或返回普通的Object, 来允许在子类中有选择性的处理Date. 它定义了一些以_FIELD 结尾的public static变量来标示多种可能和FieldPosition一起使用的变量(cf. java.util.Format的Javadoc).

仅有且最常用的DateFormat类的具体实现是SimpleDateFormat. 它提供了所有上述的功能, 且允许定义任意的时间格式. 有一套丰富语法来指定格式化模式; JavaDoc提供了所有细节. 模式可以被指定为构造函数的参数或显式的设置.

Printing a Timestamp: A Cut-and-Paste Example

想象你要用用户定义的格式打印当前的时间; 比如, 到log文件. 以下就是做这些的:

// 创建以下格式的模式: Hour(0-23):Minute:Second

SimpleDateFormat formatter = new SimpleDateFormat( "HH:mm:ss" );

Date now = new Date();

String logEntry = formatter.format(now);



// 从后端读入

try {

Date sometime = formatter.parse(logEntry);

} catch ( ParseException exc ) {

exc.printStackTrace();

}

注意需要被catch的ParseException. 当输入的字符串不能被parse的时候被抛出.


java.sql.*相关类

在java.sql.*包中的日期时间处理类都继承了java.util.Date. 事实上它们三个反映了三种标准SQL92模型的类型需要DATE, TIME, and TIMESTAMP.

像java.util.Date, SQL包中的这三个类是表示一个时间点的数字的简单封装. 分别地Date和Time类忽略关于一天中的时间或日历的日期.

可Timestamp类, 不仅包含到毫秒精度, 通常的时间和日期, 而且允许存储附加的精确到纳秒精度的时间点的数据. (纳秒是一秒的十亿分之一)

除了影射对应的SQL数据类型, 这些类处理与SQL一致的字符串表示的转换. 在这一点, 这三个类中的每一个覆盖了toString()方法. 此外, 每个类提供了静态的工厂方法, valueOf(String), 返回被初始化为传递参数字符串表示的时间的当前调用类的实例. 这三个方法的字符串表示的格式已被SQL标准选定, 且不能被程序员改变.

存储纳秒需要的额外数据, 没有很好的与在Timestamp中其它通常的时间和日期信息的表示一致. 比如, 在Timestamp实例上调用 getTime() 将返回自Unix纪元开始的毫秒数,忽略了纳秒数据. 简单地, 根据JavaDoc文档, hashCode() 方法在子类中没有被覆盖, 因而也忽略了纳秒数据.

java.sql.Timestamp的JavaDoc指出"inheritance relationship (…) 实际表示实现的继承, 而不是类型继承(这违反了继承的初衷). 但即使这句话是错误的, 既然Java没有私有继承的概念(也即继承实现). 所有java.sql.*包中的类应该被设计为封装一个java.util.Date对象, 而不是继承它, 仅暴露需要的方法 — 最起码, 方法比如hashCode() 应该被适当的覆盖.

最后一个评论是关于数据库引擎的时区的处理. 在java.sql.*包中的类不允许显式的设置时区. 数据库服务器(或驱动) 可自由的依据服务器server的当地时区解释这些信息, 且其可能被影响而变化(比如, 因为夏令时).

总结

通过前面的讨论, 很清楚, Java的日期处理相关类并非很复杂, 但是没有被很好设计. 封装被疏漏, APIs结构复杂且没有被很好的组织, 且非常见的思路经常被无缘由的使用. 实现更有其它的莫名奇妙(提议看看Calendar.getInstance(Locale)对于所有可用locale实际返回对象的类型!) 另一方面, the classes manage to treat all of the difficulties inherent in internationalized date handling and, in any case, are here to stay. 希望这篇文章对帮助你搞清它们的用法有所帮助.

Call Me By My True Names

As a last example of the wonderful consistency and orthogonality of Java’s APIs, I would like to list three (maybe there are more!) different methods to obtain the number of milliseconds since the start of the Unix epoch:

long java.util.Date.getTime()
long java.util.Calendar.getTimeInMillis() (New with JDK 1.4.1. Note that java.util.Calendar.getTime() returns a Date object!)
long java.lang.System.currentTimeMillis()
2005年06月27日

1.当你正在忙时,却把手机开著, 等著她/他的短信..
你已经爱上她/他了

2.如果你喜欢和她/他两个人单独漫步..
你已经爱上她/他了

3.当你和她/他在一起时,你会假装不注意他,但是当她离/他开你的视线时,你会
急著寻找她/他…
你已经爱上她了


4.当她/他受伤或生病时,你会很关心她, 替她/他著急..
你已经爱上他了


5.当她/他和别人要好时, 你会感到吃不知其味…
你已经爱上她了


6.当你看到她/他那甜美的笑时,你的嘴角会扬起一丝得意的笑..
你已经爱上她/他了


7.当你看到这篇文章时, 心里想到某个人..

那么你肯定已经爱上她/他

2005年06月26日

俺知道俺该死,你杀死俺都是应该的。那一天俺来到河南,曾经有份真诚的胡辣汤放在俺的面前,俺没有珍惜。问题很严重,河南人民不尔俺了,俺很郁闷。等到后来有一天俺喝了一碗胡辣汤才后悔,靠,中啊,喝着还怪不赖里。怎么能这样呢?不防这几年河南人三个代表落实的好,与时俱进了,还有喝着如此得劲的汤,我TM以前咋木牛喝里。俺喝了第1碗,木牛喝够,河南人又逞了第2碗,喝了第2碗,还是木牛喝够,热情好客的河南人又端上了第3碗,这时侯我才真正感到河南人实在呀。我就纳了闷了,这么好的人为啥总是受到不公正待遇呢?同样是在中国生活的各地人,和河南人相比差距咋就这大呢?河南雄起。喝了第3碗,越喝越想喝。一直喝了六碗后,俺的老搭档吴孟达怕俺撑坏了,就喊来了赵伟、李香两个人,想恶心恶心我,不让俺再喝了,俺说:“瞧她俩那小样,还想忽悠俺 ”。结果俺没当回事。喝第8碗时,他又请来了福荣姐、木子梅、流氓燕、青桐等风头正盛的人物,俺只是受了点小影响,喝得慢了点。最后老吴使出杀手锏,搬来了两位超一流大侠,俺一听此二人名字就对老吴说:“I 服了 you 了。”天啊是李鸭朋、梦露胡(胡冰),俺再也没有胃口了,支持不住,我倒,狂吐ing。
  央视哥们听说俺撑坏了,以迅雷不及掩耳盗铃之势派来了最有名的大夫给俺会诊。
  NO.1 王小丫
   王小丫大夫冲进手术室,关切地问俺:"你知道你伤在哪儿了吗?"
  俺吃力地摇摇头,王小丫接着说:"给你三个备选答案吧!a.胃溃疡;b.胸腔大面积出血在;c.颅内出血。"
  俺咬了咬牙,说:"a!"
  王小丫迷人地一笑问道:"你确定吗?你还可以打一个求助电话。"
  俺狂吐血道:"我要打给我父亲!"
  "那好,你们的交流时间只有30秒!"
  "老爸,我不行了,快换医院……"
  NO.2 李咏
  李咏大夫冲进手术室,看了一下病情,说:"现在病人需要过……"
  于是全体护士一起喊:"幸运第一关!"接着一个直拳击向伤者面门。
  NO.3 倪萍
  倪萍大夫以最快的速度冲进手术室,以最快的速度从眼中流下两行液体,对全体护士动情地说:"其实……他(指俺)已经离开家在外面漂泊了两个多小时,他是多么地想家呀,多么地想他的母亲呀,多想抱抱他那未满月的孩子呀,但是现在……"
  倪萍擦了擦眼泪,接着对病人说:"请您对家里的亲人说上一句话吧!表达一下此时此刻的心情!"
  (全体护士含泪鼓掌中)俺艰难地张开嘴:"妈,我没救了!"
  NO.4 韩乔生
  韩乔生大夫飞一样冲进手术室,对全体护士说:"忽如一夜春风来,全国流行胡辣汤,这位病人因为喝过多的胡辣汤而生病,具体受伤位置好像是头部……哦对不起,是脚部,还不是,哪就一定是腚部……" 一位护士提醒道:"韩大夫,是肚子大呀!" 韩乔生瞪了她一眼,接着说:"病人的身高1.75厘米,体重大约108公斤。"(全体护士倒地。)
  最后,韩乔生开始安排手术任务:"1号,你负责观察病人心电图;2号,你负责给病人电击;3号,你负责给病人缝合;病人,你负责给病人打麻药。"
  俺哭道:"俺命真苦呀!打麻药都得自己动手。"
  NO.5 鞠萍
  鞠萍大夫飘然走进手术室,对护士们说:"全体护士小朋友请注意,这就是受伤的患者星星,大衣里面正在作痛的是肚子,你们可能看他和平时不一样,那是因为他太贪吃了。"
  NO.6 赵忠祥
  赵忠祥大夫稳重地迈进手术室,对护士们说:"像大多数动物一样,每当人类为了在危急关头能够延续受伤的生命,人类会有一种专门负责救治的人及时出现。这种动物群体内自我救治的例子还很多,像生活在非洲的眼镜蛇,都能够自己给自己医治伤口……大家快看,这个人正在挣扎、抖动,一个字,紧
  病人痛苦地大叫:"天哪!谁让你们给我请来个兽医!"
  人世间对俺最好的就是你了,你用刀劈死俺吧,不用想了,如果上天能再给俺一次机会,俺说啥也得对河南人讲三个字:我爱喝!不中了俺就死在河南去球了,赵本山那话,小样,谁怕谁呀,条件允许的话,倒插门也是可以的,你能把俺怎么的……哈哈哈哈(未完待续)1

2005年06月21日
JAVA上加密算法的实现用例
第1章基础知识

1.1. 单钥密码体制
单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。

通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难。但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的保管安全性也是一个问题。

单钥密码体制的代表是美国的DES

1.2. 消息摘要
一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。

消息摘要有两个基本属性:

两个不同的报文难以生成相同的摘要
难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要
代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5


1.3. Diffie-Hellman密钥一致协议
密钥一致协议是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。

先决条件,允许两名用户在公开媒体上交换信息以生成"一致"的,可以共享的密钥

代表:指数密钥一致协议(Exponential Key Agreement Protocol)

1.4. 非对称算法与公钥体系
1976年,Dittie和Hellman为解决密钥管理问题,在他们的奠基性的工作"密码学的新方向"一文中,提出一种密钥交换协议,允许在不安全的媒体上通过通讯双方交换信息,安全地传送秘密密钥。在此新思想的基础上,很快出现了非对称密钥密码体制,即公钥密码体制。在公钥体制中,加密密钥不同于解密密钥,加密密钥公之于众,谁都可以使用;解密密钥只有解密人自己知道。它们分别称为公开密钥(Public key)和秘密密钥(Private key)。

迄今为止的所有公钥密码体系中,RSA系统是最著名、最多使用的一种。RSA公开密钥密码系统是由R.Rivest、A.Shamir和L.Adleman俊教授于1977年提出的。RSA的取名就是来自于这三位发明者的姓的第一个字母

1.5. 数字签名
所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。 

在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数)生成的,对这些HASH函数的特殊要求是:

接受的输入报文数据没有长度限制;
对任何输入报文数据生成固定长度的摘要(数字指纹)输出
从报文能方便地算出摘要;
难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要;
两个不同的报文难以生成相同的摘要



代表:DSA

第2章在JAVA中的实现

2.1. 相关
Diffie-Hellman密钥一致协议和DES程序需要JCE工具库的支持,可以到 http://java.sun.com/security/index.html 下载JCE,并进行安装。简易安装把 jce1.2.1\lib 下的所有内容复制到 %java_home%\lib\ext下,如果没有ext目录自行建立,再把jce1_2_1.jar和sunjce_provider.jar添加到CLASSPATH内,更详细说明请看相应用户手册

2.2. 消息摘要MD5和SHA的使用
使用方法:

首先用生成一个MessageDigest类,确定计算方法

java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");

添加要进行计算摘要的信息

alga.update(myinfo.getBytes());

计算出摘要

byte[] digesta=alga.digest();

发送给其他人你的信息和摘要

其他人用相同的方法初始化,添加信息,最后进行比较摘要是否相同

algb.isEqual(digesta,algb.digest())

相关AIP

java.security.MessageDigest 类

static getInstance(String algorithm)

返回一个MessageDigest对象,它实现指定的算法

参数:算法名,如 SHA-1 或MD5

void update (byte input)

void update (byte[] input)

void update(byte[] input, int offset, int len)

添加要进行计算摘要的信息

byte[] digest()

完成计算,返回计算得到的摘要(对于MD5是16位,SHA是20位)

void reset()

复位

static boolean isEqual(byte[] digesta, byte[] digestb)

比效两个摘要是否相同

代码:

import java.security.*;
public class myDigest {
public static void main(String[] args) {

myDigest my=new myDigest();
my.testDigest();

}
public void testDigest()
{
try {
String myinfo="我的测试信息";

//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(myinfo.getBytes());
byte[] digesta=alga.digest();
System.out.println("本信息摘要是:"+byte2hex(digesta));
//通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(myinfo.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println("信息检查正常");
}
else
{
System.out.println("摘要不相同");
}

}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
}

}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}

}





2.3. 数字签名DSA

对于一个用户来讲首先要生成他的密钥对,并且分别保存
生成一个KeyPairGenerator实例

java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");
如果设定随机产生器就用如相代码初始化
SecureRandom secrand=new SecureRandom();
secrand.setSeed("tttt".getBytes()); //初始化随机产生器
keygen.initialize(512,secrand); //初始化密钥生成器
否则
keygen.initialize(512);
生成密钥公钥pubkey和私钥prikey
KeyPair keys=keygen.generateKeyPair(); //生成密钥组
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();
分别保存在myprikey.dat和mypubkey.dat中,以便下次不在生成
(生成密钥对的时间比较长
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat"));
out.writeObject(prikey);
out.close();
out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat"));
out.writeObject(pubkey);
out.close();






用他私人密钥(prikey)对他所确认的信息(info)进行数字签名产生一个签名数组
从文件中读入私人密钥(prikey)

java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat"));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();
初始一个Signature对象,并用私钥对信息签名
java.security.Signature signet=java.security.Signature.getInstance("DSA");
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign();
把信息和签名保存在一个文件中(myinfo.dat)
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat"));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
把他的公钥的信息及签名发给其它用户






其他用户用他的公共密钥(pubkey)和签名(signed)和信息(info)进行验证是否由他签名的信息
读入公钥
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("mypubkey.dat"));
PublicKey pubkey=(PublicKey)in.readObject();
in.close();

读入签名和信息
in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat"));
String info=(String)in.readObject();
byte[] signed=(byte[])in.readObject();
in.close();

初始一个Signature对象,并用公钥和签名进行验证
java.security.Signature signetcheck=java.security.Signature.getInstance("DSA");
signetcheck.initVerify(pubkey);
signetcheck.update(info.getBytes());
if (signetcheck.verify(signed)) { System.out.println("签名正常");}

对于密钥的保存本文是用对象流的方式保存和传送的,也可可以用编码的方式保存.注意要
import java.security.spec.*
import java.security.*

具休说明如下

public key是用X.509编码的,例码如下: byte[] bobEncodedPubKey=mypublic.getEncoded(); //生成编码
//传送二进制编码
//以下代码转换编码为相应key对象
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);




对于Private key是用PKCS#8编码,例码如下: byte[] bPKCS=myprikey.getEncoded();
//传送二进制编码
//以下代码转换编码为相应key对象
PKCS8EncodedKeySpec priPKCS8=new PKCS8EncodedKeySpec(bPKCS);
KeyFactory keyf=KeyFactory.getInstance("DSA");
PrivateKey otherprikey=keyf.generatePrivate(priPKCS8);







常用API
java.security.KeyPairGenerator 密钥生成器类
public static KeyPairGenerator getInstance(String algorithm) throws NoSuchAlgorithmException
以指定的算法返回一个KeyPairGenerator 对象
参数: algorithm 算法名.如:"DSA","RSA"

public void initialize(int keysize)


以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置


参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数

public void initialize(int keysize, SecureRandom random)
以指定的长度初始化和随机发生器初始化KeyPairGenerator对象
参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数
random 一个随机位的来源(对于initialize(int keysize)使用了默认随机器

public abstract KeyPair generateKeyPair()
产生新密钥对

java.security.KeyPair 密钥对类
public PrivateKey getPrivate()
返回私钥

public PublicKey getPublic()
返回公钥

java.security.Signature 签名类
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
返回一个指定算法的Signature对象
参数 algorithm 如:"DSA"

public final void initSign(PrivateKey privateKey)
throws InvalidKeyException
用指定的私钥初始化
参数:privateKey 所进行签名时用的私钥

public final void update(byte data)
throws SignatureException
public final void update(byte[] data)
throws SignatureException
public final void update(byte[] data, int off, int len)
throws SignatureException
添加要签名的信息

public final byte[] sign()
throws SignatureException
返回签名的数组,前提是initSign和update

public final void initVerify(PublicKey publicKey)
throws InvalidKeyException
用指定的公钥初始化
参数:publicKey 验证时用的公钥

public final boolean verify(byte[] signature)
throws SignatureException
验证签名是否有效,前提是已经initVerify初始化
参数: signature 签名数组

*/
import java.security.*;
import java.security.spec.*;
public class testdsa {
public static void main(String[] args) throws java.security.NoSuchAlgorithmException,java.lang.Exception {
testdsa my=new testdsa();
my.run();
}
public void run()
{

//数字签名生成密钥
//第一步生成密钥对,如果已经生成过,本过程就可以跳过,对用户来讲myprikey.dat要保存在本地
//而mypubkey.dat给发布给其它用户
if ((new java.io.File("myprikey.dat")).exists()==false) {
if (generatekey()==false) {
System.out.println("生成密钥对败");
return;
};
}
//第二步,此用户
//从文件中读入私钥,对一个字符串进行签名后保存在一个文件(myinfo.dat)中
//并且再把myinfo.dat发送出去
//为了方便数字签名也放进了myifno.dat文件中,当然也可分别发送
try {
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat"));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();

// java.security.spec.X509EncodedKeySpec pubX509=new java.security.spec.X509EncodedKeySpec(bX509);

//java.security.spec.X509EncodedKeySpec pubkeyEncode=java.security.spec.X509EncodedKeySpec
String myinfo="这是我的信息"; //要签名的信息
//用私钥对信息生成数字签名
java.security.Signature signet=java.security.Signature.getInstance("DSA");
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign(); //对信息的数字签名
System.out.println("signed(签名内容)="+byte2hex(signed));
//把信息和数字签名保存在一个文件中
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat"));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
System.out.println("签名并生成文件成功");
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println("签名并生成文件失败");
};

//第三步
//其他人通过公共方式得到此户的公钥和文件
//其他人用此户的公钥,对文件进行检查,如果成功说明是此用户发布的信息.
//
try {

java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("mypubkey.dat"));
PublicKey pubkey=(PublicKey)in.readObject();
in.close();
System.out.println(pubkey.getFormat());

in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat"));
String info=(String)in.readObject();
byte[] signed=(byte[])in.readObject();
in.close();

java.security.Signature signetcheck=java.security.Signature.getInstance("DSA");
signetcheck.initVerify(pubkey);
signetcheck.update(info.getBytes());
if (signetcheck.verify(signed)) {
System.out.println("info="+info);
System.out.println("签名正常");
}
else System.out.println("非签名正常");
}
catch (java.lang.Exception e) {e.printStackTrace();};


}

//生成一对文件myprikey.dat和mypubkey.dat—私钥和公钥,
//公钥要用户发送(文件,网络等方法)给其它用户,私钥保存在本地
public boolean generatekey()
{
try {
java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");
// SecureRandom secrand=new SecureRandom();
// secrand.setSeed("tttt".getBytes()); //初始化随机产生器
// keygen.initialize(576,secrand); //初始化密钥生成器
keygen.initialize(512);
KeyPair keys=keygen.genKeyPair();
// KeyPair keys=keygen.generateKeyPair(); //生成密钥组
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();

java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat"));
out.writeObject(prikey);
out.close();
System.out.println("写入对象 prikeys ok");
out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat"));
out.writeObject(pubkey);
out.close();
System.out.println("写入对象 pubkeys ok");
System.out.println("生成密钥对成功");
return true;
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println("生成密钥对失败");
return false;
};

}

public String byte2hex(byte[] b)
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}

}





2.4. DESede/DES对称算法
首先生成密钥,并保存(这里并没的保存的代码,可参考DSA中的方法)

KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);


SecretKey deskey = keygen.generateKey();

用密钥加密明文(myinfo),生成密文(cipherByte)

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.ENCRYPT_MODE,deskey);

byte[] cipherByte=c1.doFinal(myinfo.getBytes());

传送密文和密钥,本文没有相应代码可参考DSA

………….

用密钥解密密文

c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE,deskey);

byte[] clearByte=c1.doFinal(cipherByte);

相对来说对称密钥的使用是很简单的,对于JCE来讲支技DES,DESede,Blowfish三种加密术

对于密钥的保存各传送可使用对象流或者用二进制编码,相关参考代码如下

SecretKey deskey = keygen.generateKey();
byte[] desEncode=deskey.getEncoded();
javax.crypto.spec.SecretKeySpec destmp=new javax.crypto.spec.SecretKeySpec(desEncode,Algorithm);
SecretKey mydeskey=destmp;





相关API

KeyGenerator 在DSA中已经说明,在添加JCE后在instance进可以如下参数

DES,DESede,Blowfish,HmacMD5,HmacSHA1

javax.crypto.Cipher 加/解密器

public static final Cipher getInstance(java.lang.String transformation)
throws java.security.NoSuchAlgorithmException,
NoSuchPaddingException





返回一个指定方法的Cipher对象

参数:transformation 方法名(可用 DES,DESede,Blowfish)

public final void init(int opmode, java.security.Key key)
throws java.security.InvalidKeyException


用指定的密钥和模式初始化Cipher对象

参数:opmode 方式(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)

key 密钥

public final byte[] doFinal(byte[] input)
throws java.lang.IllegalStateException,
IllegalBlockSizeException,
BadPaddingException





对input内的串,进行编码处理,返回处理后二进制串,是返回解密文还是加解文由init时的opmode决定


注意:本方法的执行前如果有update,是对updat和本次input全部处理,否则是本inout的内容

/*
安全程序 DESede/DES测试
*/
import java.security.*;
import javax.crypto.*;
public class testdes {
public static void main(String[] args){
testdes my=new testdes();
my.run();
}
public void run() {
//添加新安全算法,如果用JCE就要把它添加进去
Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm="DES"; //定义 加密算法,可用 DES,DESede,Blowfish
String myinfo="要加密的信息";
try {
//生成密钥
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();

//加密
System.out.println("加密前的二进串:"+byte2hex(myinfo.getBytes()));
System.out.println("加密前的信息:"+myinfo);
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte[] cipherByte=c1.doFinal(myinfo.getBytes());
System.out.println("加密后的二进串:"+byte2hex(cipherByte));
//解密
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte[] clearByte=c1.doFinal(cipherByte);
System.out.println("解密后的二进串:"+byte2hex(clearByte));
System.out.println("解密后的信息:"+(new String(clearByte)));

}
catch (java.security.NoSuchAlgorithmException e1) {e1.printStackTrace();}
catch (javax.crypto.NoSuchPaddingException e2) {e2.printStackTrace();}
catch (java.lang.Exception e3) {e3.printStackTrace();}
}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}

}





2.5. Diffie-Hellman密钥一致协议
公开密钥密码体制的奠基人Diffie和Hellman所提出的 "指数密钥一致协议"(Exponential Key Agreement Protocol),该协议不要求别的安全性先决条件,允许两名用户在公开媒体上交换信息以生成"一致"的,可以共享的密钥。在JCE的中实现用户alice生成DH类型的密钥对,如果长度用1024生成的时间请,推荐第一次生成后保存DHParameterSpec,以便下次使用直接初始化.使其速度加快

System.out.println("ALICE: 产生 DH 对 …");
KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH");
aliceKpairGen.initialize(512);
KeyPair aliceKpair = aliceKpairGen.generateKeyPair();





alice生成公钥发送组bob

byte[] alicePubKeyEnc = aliceKpair.getPublic().getEncoded();





bob从alice发送来的公钥中读出DH密钥对的初始参数生成bob的DH密钥对

注意这一步一定要做,要保证每个用户用相同的初始参数生成的

DHParameterSpec dhParamSpec = ((DHPublicKey)alicePubKey).getParams();
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("DH");
bobKpairGen.initialize(dhParamSpec);
KeyPair bobKpair = bobKpairGen.generateKeyPair();





bob根据alice的公钥生成本地的DES密钥

KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH");
bobKeyAgree.init(bobKpair.getPrivate());
bobKeyAgree.doPhase(alicePubKey, true);
SecretKey bobDesKey = bobKeyAgree.generateSecret("DES");





bob已经生成了他的DES密钥,他现把他的公钥发给alice,

byte[] bobPubKeyEnc = bobKpair.getPublic().getEncoded();





alice根据bob的公钥生成本地的DES密钥

,,,,,,解码
KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH");
aliceKeyAgree.init(aliceKpair.getPrivate());
aliceKeyAgree.doPhase(bobPubKey, true);
SecretKey aliceDesKey = aliceKeyAgree.generateSecret("DES");





bob和alice能过这个过程就生成了相同的DES密钥,在这种基础就可进行安全能信

常用API

java.security.KeyPairGenerator 密钥生成器类
public static KeyPairGenerator getInstance(String algorithm)
throws NoSuchAlgorithmException
以指定的算法返回一个KeyPairGenerator 对象
参数: algorithm 算法名.如:原来是DSA,现在添加了 DiffieHellman(DH)

public void initialize(int keysize)
以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置
参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数
注意:如果用1024生长的时间很长,最好生成一次后就保存,下次就不用生成了

public void initialize(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
以指定参数初始化

javax.crypto.interfaces.DHPublicKey
public DHParameterSpec getParams()
返回
java.security.KeyFactory

public static KeyFactory getInstance(String algorithm)
throws NoSuchAlgorithmException
以指定的算法返回一个KeyFactory
参数: algorithm 算法名:DSH,DH

public final PublicKey generatePublic(KeySpec keySpec)
throws InvalidKeySpecException
根据指定的key说明,返回一个PublicKey对象

java.security.spec.X509EncodedKeySpec
public X509EncodedKeySpec(byte[] encodedKey)
根据指定的二进制编码的字串生成一个key的说明
参数:encodedKey 二进制编码的字串(一般能过PublicKey.getEncoded()生成)
javax.crypto.KeyAgreement 密码一至类

public static final KeyAgreement getInstance(java.lang.String algorithm)
throws java.security.NoSuchAlgorithmException
返回一个指定算法的KeyAgreement对象
参数:algorithm 算法名,现在只能是DiffieHellman(DH)

public final void init(java.security.Key key)
throws java.security.InvalidKeyException
用指定的私钥初始化
参数:key 一个私钥

public final java.security.Key doPhase(java.security.Key key,
boolean lastPhase)
throws java.security.InvalidKeyException,
java.lang.IllegalStateException
用指定的公钥进行定位,lastPhase确定这是否是最后一个公钥,对于两个用户的
情况下就可以多次定次,最后确定
参数:key 公钥
lastPhase 是否最后公钥

public final SecretKey generateSecret(java.lang.String algorithm)
throws java.lang.IllegalStateException,
java.security.NoSuchAlgorithmException,
java.security.InvalidKeyException
根据指定的算法生成密钥
参数:algorithm 加密算法(可用 DES,DESede,Blowfish)

*/
import java.io.*;
import java.math.BigInteger;
import java.security.*;
import java.security.spec.*;
import java.security.interfaces.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import com.sun.crypto.provider.SunJCE;

public class testDHKey {


public static void main(String argv[]) {
try {
testDHKey my= new testDHKey();
my.run();
} catch (Exception e) {
System.err.println(e);

}
}

private void run() throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());

System.out.println("ALICE: 产生 DH 对 …");
KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH");
aliceKpairGen.initialize(512);
KeyPair aliceKpair = aliceKpairGen.generateKeyPair(); //生成时间长

// 张三(Alice)生成公共密钥 alicePubKeyEnc 并发送给李四(Bob) ,
//比如用文件方式,socket…..
byte[] alicePubKeyEnc = aliceKpair.getPublic().getEncoded();

//bob接收到alice的编码后的公钥,将其解码
KeyFactory bobKeyFac = KeyFactory.getInstance("DH");
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec (alicePubKeyEnc);
PublicKey alicePubKey = bobKeyFac.generatePublic(x509KeySpec);
System.out.println("alice公钥bob解码成功");
// bob必须用相同的参数初始化的他的DH KEY对,所以要从Alice发给他的公开密钥,
//中读出参数,再用这个参数初始化他的 DH key对

//从alicePubKye中取alice初始化时用的参数
DHParameterSpec dhParamSpec = ((DHPublicKey)alicePubKey).getParams();
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("DH");
bobKpairGen.initialize(dhParamSpec);
KeyPair bobKpair = bobKpairGen.generateKeyPair();
System.out.println("BOB: 生成 DH key 对成功");
KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH");
bobKeyAgree.init(bobKpair.getPrivate());
System.out.println("BOB: 初始化本地key成功");
//李四(bob) 生成本地的密钥 bobDesKey
bobKeyAgree.doPhase(alicePubKey, true);
SecretKey bobDesKey = bobKeyAgree.generateSecret("DES");
System.out.println("BOB: 用alice的公钥定位本地key,生成本地DES密钥成功");
// Bob生成公共密钥 bobPubKeyEnc 并发送给Alice,
//比如用文件方式,socket…..,使其生成本地密钥
byte[] bobPubKeyEnc = bobKpair.getPublic().getEncoded();
System.out.println("BOB向ALICE发送公钥");

// alice接收到 bobPubKeyEnc后生成bobPubKey
// 再进行定位,使aliceKeyAgree定位在bobPubKey
KeyFactory aliceKeyFac = KeyFactory.getInstance("DH");
x509KeySpec = new X509EncodedKeySpec(bobPubKeyEnc);
PublicKey bobPubKey = aliceKeyFac.generatePublic(x509KeySpec);
System.out.println("ALICE接收BOB公钥并解码成功");
;
KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH");
aliceKeyAgree.init(aliceKpair.getPrivate());
System.out.println("ALICE: 初始化本地key成功");

aliceKeyAgree.doPhase(bobPubKey, true);
// 张三(alice) 生成本地的密钥 aliceDesKey
SecretKey aliceDesKey = aliceKeyAgree.generateSecret("DES");
System.out.println("ALICE: 用bob的公钥定位本地key,并生成本地DES密钥");

if (aliceDesKey.equals(bobDesKey)) System.out.println("张三和李四的密钥相同");
//现在张三和李四的本地的deskey是相同的所以,完全可以进行发送加密,接收后解密,达到
//安全通道的的目的

/*
* bob用bobDesKey密钥加密信息
*/
Cipher bobCipher = Cipher.getInstance("DES");
bobCipher.init(Cipher.ENCRYPT_MODE, bobDesKey);
String bobinfo= "这是李四的机密信息";
System.out.println("李四加密前原文:"+bobinfo);
byte[] cleartext =bobinfo.getBytes();
byte[] ciphertext = bobCipher.doFinal(cleartext);

/*
* alice用aliceDesKey密钥解密
*/
Cipher aliceCipher = Cipher.getInstance("DES");
aliceCipher.init(Cipher.DECRYPT_MODE, aliceDesKey);
byte[] recovered = aliceCipher.doFinal(ciphertext);
System.out.println("alice解密bob的信息:"+(new String(recovered)));
if (!java.util.Arrays.equals(cleartext, recovered))
throw new Exception("解密后与原文信息不同");
System.out.println("解密后相同");

}

}





第3章小结
在加密术中生成密钥对时,密钥对的当然是越长越好,但费时也越多,请从中从实际出发选取合适的长度,大部分例码中的密钥是每次运行就从新生成,在实际的情况中是生成后在一段时间保存在文件中,再次运行直接从文件中读入,从而加快速度。当然定时更新和加强密钥保管的安全性也是必须的。

关于作者
王辉,具有八年的编程及系统管理经验,所使用的语言为C和Java 编程语言。目前在深圳一家公司做程序员,使用C和JAVA为DB2数据库编程.可通过 ddxxkk@21cn.com 联系。
2005年06月19日

卷一 唐五代词

菩萨蛮 李白
平林漠漠烟如织,寒山一带伤心碧。
暝色入高楼,有人楼上愁。
玉阶宝伫立,宿鸟归飞急。
何处是归程,长亭更短亭。

忆秦娥 李白
箫声咽,秦娥梦断秦楼月。
秦楼月。
年年柳色,灞陵伤别。
乐游原上清秋节,威阳古道音尘绝。
音尘绝。
西风残照,汉家陵阙。

渔歌子 张志和
西塞山前白鹭飞,桃花流水鳜鱼肥。
青箬笠,绿蓑衣,斜风细雨不须归。

调笑令 戴叔伦
边草,边草。边草尽来兵老。
山南山北雪晴,千里万里月明。
明月,明月,胡笳一声愁绝。

调笑令 王建
团扇,团扇。美人病来遮面。
玉颜憔悴三年,谁复商量管弦?
弦管,弦管。春草昭阳路断。

竹枝词 刘禹锡
山桃红花满上头,蜀江春水拍山流。
花红易衰似郎意,水流无限似侬愁。

潇湘神 刘禹锡
斑竹枝,斑竹枝。泪痕点点寄相思。
楚客欲听瑶瑟怨,潇湘深夜月明时。

忆江南 二首
江南好,风景旧曾谙。
日出江花红胜火,春来江水绿如蓝。
能不忆江南?

江南忆,最忆是杭州。
山寺月中寻桂子,郡亭枕上看潮头。
何日更重游?

长相思 白居易
汴水流,泗水流。流到瓜州古渡头。
吴山点点愁。
思悠悠,恨悠悠,恨到归时方始休。
月明人倚楼。

梦江南 皇甫松
兰烬落,屏上暗红蕉。
闺梦江南梅熟日,夜船吹笛雨潇潇。
人语驿边桥。

采莲子 二首 皇甫松
菡萏香连十顷陂–翠棹,小姑贪戏采莲迟–年少。
晚来弄水船头湿–翠棹,更脱红裙裹鸭儿–年少。

船动湖光滟滟秋–翠棹,含看年少信船流–年少。
无端隔水抛莲子–翠棹,遥被人知半日羞–年少。

望江南 二首 温庭筠
千万恨,恨极在天涯。
山月不知心里事,水风空落眼前花。
摇曳碧云斜。

梳洗罢,独倚望江楼。
过尽千帆皆不是,斜晖脉脉水悠悠。
肠断白A*洲。

A*(pin2)=草字头+频繁的频

菩萨蛮 温庭筠
小山重叠金明灭,鬓云欲度香腮雪。
懒起西蛾眉,香妆梳洗迟。
照花前后镜,花面交相映。
新贴绣罗襦,双双金鹧鸪。

菩萨蛮 温庭筠
水精帘里颇黎枕,暖香惹梦鸳鸯锦。
江上柳如烟,雁飞残月天。
藕丝秋色浅,人胜参差剪。
双鬓隔香红,玉钗头上风。

菩萨蛮 温庭筠
玉楼明月长相忆,柳丝袅娜春无力。
门外草萋萋,送君闻马嘶。
画罗金翡翠,香烛销成泪。
花落子规啼,绿窗残梦迷。

更漏子 温庭筠
柳丝长,春雨细。花外漏声迢递。
惊塞雁,起城乌。画屏金鹧鸪。
香雾薄,透帘幕。惆怅谢家池阁。
红烛背,乡帘垂。梦长君不知。

更漏子 温庭筠
玉炉香,红蜡泪。偏照画堂秋思。
眉翠薄,鬓云残,夜长衾枕寒。
梧桐树,三更雨。不道离情正苦。
一叶叶,一起声。空阶滴到明。

菩萨蛮 韦庄
红楼别夜堪惆怅。香灯半卷流苏帐。
残月出门时。美人和泪辞。
琵琶金翠羽。弦上黄莺语。
劝我早归家,绿窗人似花。

菩萨蛮 韦庄
人人尽说江南好,游人只合江南老。
春水碧于天。画船听雨眠。
垆边人似月,皓腕凝霜雪。
未老莫还乡。还乡须断肠。

菩萨蛮 韦庄
劝君今夜须沉醉,尊前莫话明朝事。
珍重主人心,酒深情亦深。
须愁春漏短,莫诉金杯满。
遇酒且呵呵,人生能几何。

女冠子 韦庄
四月十七,正是去年今日。别君时。
忍泪佯低面,含羞半敛眉。
不知魂已断,空有梦相随。
除却天边月,没人知。

女冠子 韦庄
昨夜夜半,枕上分明梦见。语多时。
仍旧桃花面,频低柳叶眉。
半羞还半喜,欲去又依依。
觉来知是梦,不胜悲。

荷叶杯 韦庄
记得那年花下,深夜。初识谢娘时。
水堂西面画帘垂,携手暗相期。
惆怅晓莺残月,泪别。从此隔音尘。
如今俱是异乡人,相见更无恨。

思帝乡 韦庄
春日游,杏花吹满头。
陌上谁家年少足风流。
妾拟将身嫁与一生休。
纵被无情弃,不能羞。

浣溪沙 薛昭蕴
红蓼渡头秋正南,印沙鸥迹自成行。
整鬟飘袖野风香。
不语含颦深浦里,几回愁煞棹船郎。
燕归帆尽水茫茫。

卷二 唐五代词

江城子 牛峤
A*B*飞起郡城东。碧江空。半滩风。
越王宫殿,C*叶藕花中。
帘卷水楼鱼浪起,千片雪,雨蒙蒙。

A*(jiao1)=交流的交+鸟字旁
B*(qing2)=青草的青+鸟字旁
C*(pin2)=草字头+频繁的频

生查子 牛希济
春山烟欲收,天淡稀星小。
残月脸边明,别泪临清晓。
语已多,情未了,回首犹重道。
记得绿罗裙,处处怜芳草。

生查子 牛希济
新月曲如眉,未有团圆意。
红豆不堪看,满眼相思泪。
终日劈桃穰,人在心儿里。
两朵隔墙花,早晚成连理。

巫山一段云 李A*
A*(xun2)=提王旁+上旬下旬的旬
古庙依青嶂,行宫枕碧流。
水声山色锁妆楼,往事思悠悠。
云雨朝还暮,烟花春复秋。
啼猿何必近孤舟,行客自多愁。

南乡子 李A*
A*(xun2)=提王旁+上旬下旬的旬
乘彩舫,过莲塘。
棹歌惊起睡鸳鸯。
游女带香偎伴笑。
争窈窕,竞折团荷遮晚唱。

临江仙 毛文锡
暮暗声尽落斜阳,银蟾影挂潇湘。
黄陵庙侧水茫茫。
楚江红树,烟雨隔高唐。
岸泊渔灯风A*碎,白B*远散浓香。
灵蛾鼓瑟韵清商。
朱弦凄切,云散碧天长。

A*(zhan3)=风字旁+占有的占
风吹物使其颤动。
B*(pin2)=草字头+频繁的频

诉衷情 顾A*
A*(jiong3)=角头+四+去掉横立人的复字底
永夜抛人何处去?绝来音。
香阁掩。眉敛。月将沉。
争忍不相寻?怨孤衾。
换我心。为你心。始知相忆深。

临江仙 唐虔A*
A*(yi1)=户字头+衣服的衣
金锁重门楚苑静,绮窗愁对秋空。
翠华一去寂无踪。
玉楼歌吹,声断已随风。
烟月不知人事改,夜阑还照深宫。
藕花相向野塘中。
暗伤亡国,清露泣香红。

南乡子 三首 欧阳炯
画舸停桡,槿花篱外竹横桥。
水上游人沙上女。回顾。笑指芭蕉林里住。

岸远沙平。目斜归路晚霞明。
孔淮自怜金翠尾。临水。认得行人惊不起。

路入南中。桃榔叶暗蓼花红。
两岸人家微雨后。收红豆。树底纤纤抬素手。

浣溪沙 孙光宪
蓼岸风多橘柚香,江边一望楚天长。
片帆烟际闪孤光。
目送征鸿飞杳杳,思随流水去茫茫。
兰红波碧忆潇湘。

谒金门 冯延巳
风乍起,吹皱一池春水。
闲引鸳鸯香径里,手A*红杏蕊。
斗鸭阑干独倚,碧玉搔头斜坠。
终日望君君不至,举头闻鹊喜。

A*(ruo2)=提手旁+妥协的妥 鹊踏枝 冯延巳
谁迢闲情抛掷久?每到春来,惆怅还依旧。
日日花前常病酒,不辞镜里朱颜瘦。
河畔青芜堤上柳,为问新愁,何事年年有?
独立小桥风满袖,平林新月人归后。

鹊踏枝 冯延巳
几日行云何处去?忘了归来,不道春将暮。
百草千花寒食路。香车系在谁家树?
泪眼倚楼频独语,双燕来时,陌上相逢否?
撩乱春愁如柳絮。悠悠梦里无寻处。

清平乐 冯延巳
雨晴烟晚,绿水新池满。
双燕飞来垂柳院,小阁画帘高卷。
黄昏独倚朱阁,西南新月眉弯。
砌下落花风起,罗衣特地春寒。

长命女 冯延巳
春日宴,绿酒一杯歌一遍。
再拜陈三愿。
一愿郎君千岁,二愿妾身长健,三愿如同梁上燕。
岁岁长相见。

浣溪女 李A*
A*(jing3)=提王旁+风景的景
手卷珠帘上玉钩,依前春恨锁重楼。
风里落花谁是主?思悠悠。
青鸟不传云外信,丁香空结雨中愁。
回首绿波春色暮,接天流。

浣溪沙 李A*
A*(jing3)=提王旁+风景的景
菡萏香锁翠叶残,西风愁起绿波间。
还与韶光共憔悴,不堪看。
细雨梦回鸡塞远,小楼吹彻玉笙寒。
多少泪珠无限恨,倚栏干。

虞美人 李煜
春花秋月何时了,往事知多少?
小楼昨夜又东风,故国不堪回首月明中。
雕栏玉砌应犹在,只是朱颜改。
问君能有几多愁?恰似一江春水向东流。

相见欢 李煜
林花谢了春红,太匆匆。
无奈朝来寒雨晚来风。
胭脂泪,留人醉,几时重?
自是人生长恨水长东。

相见欢 李煜
无言独上西楼,月如钩。
寂寞梧桐深院锁清秋。
剪不断,理还乱,是离愁。
别是一般滋味在心头。

浪淘沙 李煜
帘外雨潺潺,春意阑珊,罗衾不耐五更寒。
梦里不知身是客,一晌贪欢。
独自莫凭栏,无限江山,别时容易见时难。
流水落花春去也,天上人间。

清平乐 李煜
别来春半,触目愁肠断。
砌下落梅如雪乱,拂了一身还满。
雁来音信无凭,路遥归梦难成。
离恨恰如春草,更行更远还生。

捣练子令 李煜
深院静,小庭空。
断续寒砧断续风。
无奈夜长人不寐,数声和月到帘栊。

破阵子 李煜
四十年来家国,三千里地山河。
凤阁龙楼连霄汉,玉树琼枝作烟萝。
几曾识干戈?
一日归为臣虏,沈腰潘鬓消磨。
最是仓皇辞庙日,教坊犹奏别离歌。
垂泪对宫娥。

临江仙 徐昌图
饮散离亭西去,浮生常恨飘蓬。
回头烟柳渐重重。
淡云孤雁远,寒日暮天红。
今夜画船何处?潮平淮月朦胧。
酒醒人静奈愁浓。
残灯孤枕梦,轻浪五更风。

菩萨蛮 敦煌曲子词
枕前发尽千船愿,要休且待青山烂。
水面上秤锤浮,直待黄河彻底枯。
白日参辰现,北斗回南面。
休即未能休,且待三更见日头。

鹊踏枝 敦煌曲子词
叵耐灵鹊多谩语,送喜何曾有凭据?
几度飞来活捉取。锁上金笼休共语。
比拟好心来送喜,谁知锁我在金笼里。
欲他征夫早归来,腾身却放我向青云里。

浣溪沙 敦煌曲子词
五两竿头风欲平,张帆举棹觉船轻。
柔情不施停却棹,是船行。
满眼风光多闪灼,看山恰似走来迎。
子细看山山不动,是船行。

望江南 敦煌曲子词
天上月,遥望似一团银。
夜久更阑风渐紧。
与奴吹散月边云,照见负心人。

卷三 北宋词 点绛唇 感兴 王禹A*
A*(ni2)=单立人+采爪头+冉冉升起的冉
雨恨云愁,江南依旧称佳丽。
水村渔市,一缕孤烟细。
天际征鸿,遥认行如缀。
平生事,此时凝睇。
谁会凭阑意。

酒泉子 五首 潘阆
长忆钱塘,不是人寰是天上。
万家掩映翠微间,处处水潺潺。
异花四季当窗放,出入分明在屏障。
别来陌柳几经秋,何日得重游。

长忆西湖,尽日凭阑楼上望。
三三两两钓鱼舟,岛屿正清秋。
笛声依约芦花里,白鸟成行忽惊起。
别来闲整钓鱼竿,思入水云寒。

长忆孤山,山在湖心如黛簇。
僧房四面向湖开。轻棹去还来。
芰荷香喷连云阁,阁上清声檐下铎。
别来尘土污人衣。空役梦魂飞。

长忆西山,灵隐寺前三竺后。
冷泉亭上几行游,三伏似清秋。
白猿时见攀高树,长啸一声何处去。
别来几向画阑看,终是欠峰峦。

长忆观潮,满郭人争江上望。
来疑沧海尽成空,万里鼓声中。
弄潮几向涛头立,手把红旗旗不湿。
别来几向梦中看,梦觉尚心寒。

踏莎行 春暮 寇准
春色将阑,莺声渐老,红英落尽春梅小。
画堂人静雨蒙蒙。屏山半掩余香袅。
密约沉沉,离情杳杳,菱花尘满慵将照。
倚楼无语欲销魂,长空黯淡连芳草。

长相思 林逋
吴山青,越山青,两岸青山相送迎。
谁知离别情?
君泪盈,妾泪盈,罗带同心结未成。
江头潮已平。

苏幕遮 别恨 范仲淹
碧云天,黄叶地。
秋色连波,波上寒烟翠。
山映斜阳天接水,
芳草无情,更在斜阳中。
黯乡魂,追旅思。
夜夜除非,好梦留人睡。
明月楼高休独倚。
酒入愁肠,化作相思泪。

渔家傲 秋思 范仲淹
寒下秋来风景异,衡阳雁去无留意。
四面边声连角起。
千嶂里,长烟落日孤城闭。
浊酒一杯家万里,燕然未勒归无计。
羌管悠悠霜满地。
人不寐,将军白发征夫泪。

南霖铃 柳永
寒蝉凄切,对长亭晚,骤雨初歇。
都门账饮无绪,留恋处,兰舟催发。
执手相泪眼,竞无语凝噎。
念去去、千里烟波,暮霭沉沉楚天阔。
多情自古伤离别。
更那堪,冷落清秋节。
今霄酒醒何处?杨柳岸、晓风残月。
此去经年,应是良辰好景虚设。
便纵有、千种风情,更与何人说?

凤栖梧 柳永
伫倚危楼风细细。
望极春愁,黯黯生天际。
草色烟光残照里,无言谁会凭栏意。
拟把疏狂图一醉。
对酒当歌,强乐还无味。
衣带渐宽终不悔,为伊消得人憔悴。

定风波 柳永
自春来,惨绿愁红,芳心是事可可。
日上花梢,莺穿柳带,犹压香衾卧。
暖酥消,腻云A*,终日厌厌倦梳裹。
无那,恨薄情一去,音书无个。
早知恁么,悔当初,不把雕鞍锁。
向鸡窗,只与蛮笺象管,拘束教吟课。
镇相随,莫抛躲。针线闲牛伴伊坐。
和我。免使年少,光阴虚过。

A*(duo3)=享受的享+单一的单

夜半乐 柳永
冻云黯淡天气,扁舟一叶,乘兴离江渚。
渡万壑千岩,越溪深处。
怒涛渐息,樵风乍起,更闻商旅相呼,片帆高举。
泛画A*、翩翩过南浦。
望中酒旆闪闪,一簇烟村,数行霜树。
残日下,渔人鸣榔归去。
败荷零落,衰杨掩映,岸边两两三三,浣纱游女。
避行客,含羞笑相语。
到此因念,绣阁轻抛,浪萍难驻。
叹后约,丁宁竞何据。
惨离怀,空恨岁晚归期限。
凝泪眼,杳杳神京路。
断鸿声远长天暮。

A*(yi4)=增益的益+鸟字旁

望海潮 柳永
东南形胜,三吴都会,钱塘自古繁华。
烟柳画桥,风帘翠幕,参差十万人家。
云树绕堤沙。怒涛卷霜雪,天堑无涯。
市列珠玑,户盈罗绮,竞豪奢。
重湖叠A*清嘉,有三秋桂子,十里荷花。
羌管弄晴,菱歌泛夜,嬉嬉钓叟莲娃。
千骑拥高牙。乘醉听箫鼓,吟赏烟霞。
异日图将好景,归去凤池夸。

A*(xian4)=山字旁+贡献的献

玉蝴蝶 柳永
望处雨收云断,凭栏悄悄,目送秋光。
晚景萧疏,堪动宋玉悲凉。
水风轻,A*花渐老,月露冷,梧叶飘黄。
遣情伤,故人何在?烟水茫茫。
难忘。文期酒会,几孤风月。屡变星霜。
海阔山遥,未知何处是潇湘?
念双燕,难凭远信,指暮天,空识归航。
黯相望。断鸿声里,立尽斜阳。

A*(pin2)=草字头+频繁的频

八声甘州 柳永
对潇潇暮雨洒江天,一番洗清秋。
渐霜风凄紧,关河冷落,残照当楼。
是处红衰翠减,苒苒物华休。
惟有长江水,无语东流。
不忍登高临远,望故乡渺邈,归思难收。
叹年来踪迹,何事苦淹留。
想佳人、妆楼A*望,误几回、天际识归舟。
争知我,倚阑干处,正恁凝愁!

A*(yong3)=禺冗的禺+一页纸的页

安公子 柳永
远岸收残雨。雨残稍觉江天暮。
拾翠汀洲人寂静。立双双鸥鹭。
望几点,渔灯隐映蒹葭浦。
停画桡,两两舟人语。
道去程今夜,遥指前村烟树。
游宦成羁旅。短樯吟倚闲凝伫。
万水千山迷远近,想乡关何处?
自别后,风亭月榭孤欢聚。
刚断肠,惹得离情苦。
听杜宇声声,劝人不如归去。

倾怀 柳永
鹜落霜洲,雁横烟渚,分明画出秋色。
暮雨乍歇,小楫夜泊,宿苇村山驿。
何人月下临风处,起一声羌笛。
离悉万绪,闻岸草,切切蛩吟如织。
为忆芳容别后,水遥山远,何计凭鳞翼。
想绣阁深沉,争知憔悴,损天涯行客。
楚峡云归,高阳人散,寂寞狂踪迹。
望京国,空目断,远峰凝碧。

鹤冲天 柳永
黄金榜上,偶失龙头望。
明代暂遗贤,如何向?
未遂风云便,争不恣狂荡?
何须论得丧。
才子词人,自是白衣卿相。
烟花巷陌,依约丹青屏障。
幸有意中人,堪寻访。
且恁偎红倚翠,风流事,平生畅。
青春都一饷。
忍把浮名,换了浅斟低唱。

天仙子 张先
时为嘉禾(今渐江嘉兴)小A*(官职),以病眠,不赴府会。
A*(zu2)=单立人+士卒的卒
水调歌声持酒听,午醉醒来愁未醒。
送春春去几时回?临晚镜,伤流景。
往事后期空记省。
沙上并禽池上暝,云破月来花弄影。
重重帘幕密遮灯,风不定,人初静。
明日落红应满径。

千秋岁 张先
数声A*B*,又报芳菲歇。
惜春更把残红折。
雨轻风色暴,梅子青时节。
永丰柳,无人尽日花飞雪。
莫把幺弦拨,怨极弦能说。
无不老,情难绝。
心似双丝网,中有千千结。
夜过也,东方未白凝残月。
A*(shi4)=是不是的是+鸟字旁
B*(guai4)=快慢的快的右一半为左边+鸟字旁
A*B*,即杜鹃。

木兰花 乙卯吴兴寒食 张先
龙头舴艋吴儿竞,笋柱秋千游女并。
芳洲拾翠暮忘归,秀野踏青来不定。
行云去后遥山暝,已放笙歌池院静。
中庭月色正清明,无数杨花过无影。 青门引 春思 张先
乍暖还轻冷,风雨晚来方定。
庭轩寂寞近清明,残花中酒,又是去年病。
楼头画角风吹醒,入夜重门静。
那堪更被明月,隔墙送过秋千影。

浣溪沙 晏殊
一曲新词酒一杯,去年天气旧亭台。
夕阳西下几时回?
无可奈何花落去,似曾相识燕归来。
小园香径独徘徊。

浣溪沙 晏殊
一向年光有限身,等闲离别易销魂。
酒筵歌席莫辞频。
满目山河空念远,落花风雨更伤春。
不如怜取眼前人。

清平乐 晏殊
红笺小字,说尽平生意。
鸿雁在云鱼在水,惆怅此情难寄。
斜阳独倚西楼,遥山恰对帘钩。
人面不知何处,绿波依旧东流。 踏莎行 晏殊
小径红稀,芳郊绿遍。
高台树色阴阴见。
春风不解禁杨花,蒙蒙乱扑行人面。
翠叶藏莺,朱帘隔燕。
炉香静逐游丝转。
一场愁梦酒醒时,斜阳却照深深院。

蝶恋花 晏殊
槛菊愁烟兰泣露。
罗幕轻寒,燕子双飞去。
明月不谙离恨苦,斜光到晓穿朱户。
昨夜西风凋碧树。
独上高楼,望尽天涯路。
欲寄彩笺兼尺素,山长水阔知何处。

破阵子 晏殊
燕子来时新社,梨花落后清明。
池上碧苔三四点,叶底黄鹂一两声。
日长飞絮轻。
巧笑东邻女伴,采桑径里逢迎。
疑怪昨宵春梦好,元是今朝斗草赢。
笑从双脸生。

玉楼春 晏殊
绿杨芳草长亭路,年少抛入容易去。
楼头残梦五更钟,花底离情三月雨。
无情不似多情苦,一寸还成千万缕。
天涯地角有穷时,只有相思无尽处。

离亭燕 张A*
A*(bian4)=曰字头+马弁的弁
一带江山如画,风物向秋潇洒。
水浸碧天何处断?霁色冷光相射。
蓼屿荻花洲,掩映竹篱茅舍。
云际客帆高挂。烟外酒旗低亚。
多少六朝兴废事,尽入渔樵闲话。
怅望倚层楼,寒日无言西下。

玉楼春 宋祁
东城渐觉风光好,A*皱波纹迎客棹。
绿杨烟外晓寒轻,红杏枝头春意闹。
浮生长恨欢娱少,肯爱千金轻一笑?
为君持酒劝斜阳,且向花间留晚照。

A*(hu2)=士宝盖+丝系底+没有的没的右一半

卷四 北宋词

贺圣朝 留别 叶清臣
满斟绿醑留君住,莫匆匆归去。
三分春色二分愁。更一分风雨。
花开花谢,都来几许?且高歌休诉。
不知来岁牡丹时,再相逢何处?

采桑子 欧阳修
轻舟短棹西湖好,绿水逶迤。
芳草长堤,隐隐笙歌处处随。
无风水面琉璃滑,不觉船移。
微动涟漪,惊起沙禽掠岸飞。

采桑子 欧阳修
群芳过后西湖好,狼藉残红。
飞絮蒙蒙。垂柳阑干尽日风。
笙歌散尽游人去,始觉春空。
垂下帘栊,双燕归来细雨中。

踏莎行 欧阳修
候馆梅残,溪桥柳细。草薰风暖摇征辔。
离愁渐远渐无穷,迢迢不断如春水。
寸寸柔肠,盈盈粉泪。楼高莫近危阑倚。
平芜尽处是春山,行人更在春山外。

生查子 欧阳修
去年元夜时,花市灯如昼。
月上柳梢头,人约黄昏后。
今年元夜时,月与灯依旧。
不见去年人,泪湿春衫袖。

蝶恋花 欧阳修
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处。楼高不见章台路。
两横风狂三月暮,门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

渔家傲 欧阳修
花底忽闻敲两桨,逡巡女伴来寻访。
酒盏旋将荷叶当。
莲舟荡,时时盏里生红浪。
花气酒香清厮酿,花腮酒面红相向。
醉倚绿阴眠一饷。
惊起望,船头阁在沙滩上。

渔家傲 欧阳修
近日门前溪水涨,郎船儿度偷相访。
船小难开红斗帐。
无计向,合欢影里空惆怅。
愿妾身为红菡萏,年年生在秋江上。
重愿郎为花底浪。
无隔障,随风逐雨长来往。

浪淘沙 欧阳修
把酒祝东风,且共从容。
垂杨紫陌洛城东。
总是当时携手处,游遍芳丛。
取散苦匆匆,此恨无穷。
今年花胜去年红。
可惜明年花更好,知与谁同?

西江月 司马光
空髻松松挽就,铅华淡淡妆成。
青烟翠雾翠轻盈,飞絮游丝无定。
相见争如不见,有情何似无情。
笙歌散后酒初醒,深院月斜人静。

风箫吟 韩缜
销离愁,连绵无际,来时陌上初熏。
绣帏人念远,暗垂珠泪,惊送征轮。
长亭长在眼,更重重、远水孤云。
但望极楼高,尽日目断王孙。
消魂,池塘别后,曾行处,绿妒轻裙。
恁时携素手,乱花飞絮里,缓步香茵。
朱颜空自改,向年年,芳意长新。
遍绿野,嬉游醉眠,莫负青春。

桂枝香 王安石
登临送目。正故国晚秋,天气初肃。
千里澄江似练,翠峰如簇。
归帆去棹残阳里,背西风,酒旗斜矗。
彩舟云淡,星河鹭起,画图难足。
念往昔,繁华竞逐,叹门外楼头,悲恨相续。
千古凭高对此,漫嗟荣辱。
六朝旧事随流水,但寒烟,芳草凝绿。
至今商女,时时犹唱,后庭遗曲。

渔家傲 王安石
平岸小桥千嶂抱,柔蓝一水萦花草。
茅屋数间窗窈窕。
尘不到。时时自有春风扫。
午枕觉来闻语鸟,欹眠似听朝鸡早。
忽忆故人今总老。
贪梦好,茫然忘了邯郸道。

卜算子 送鲍浩然之浙东 王观
水是眼波横,山是眉峰聚。
欲问行人去那边?眉眼盈盈处。
才始送春归,又送君归去。
若到江南赶上春,千万和春住。

临江仙 晏几道
梦后楼台高锁,酒醒帘幕低垂。
去年春恨却来时,落花人独立,微雨燕双飞。
记得小A*初见,两重心字罗衣。
琵琶弦上说相思。
当时明月在,曾照彩云归。

A*(pin2)=草字头+频繁的频

蝶恋花 晏几道
醉别西楼梦不记,春梦秋云,聚散真容易。
斜月半窗还少睡,画屏闲展吴山翠。
衣上酒痕诗里字,点点行行,总是凄凉意。
红烛自怜无好计,夜寒空替人垂泪。

鹧鸪天 晏几道
彩袖殷勤捧玉钟,当年拚却醉颜红。
舞低杨柳楼心月,歌尽桃花扇底风。
从别后,忆相逢,几回魂梦与君同。
今宵剩把银A*照,犹照相逢是梦中。

A*(gang1)=金字旁+工人的工
灯。

鹧鸪天 晏几道
小令尊前见玉箫,银灯一曲太妖娆。
歌中醉倒谁能恨?唱罢归来酒未消。
春悄悄,夜迢迢,碧云天共楚宫遥。
梦魂惯得无拘检,又踏杨花过谢桥。

卖花声 题岳阳楼 张舜民
木叶下君山,空水漫漫,十分斟酒敛芳颜。
不是渭城西去客,休唱阳关。
醉袖抚危栏。天淡云闲,何人此路得生还。
回首夕阳红尽处,应是长安。

水龙吟 次韵章质夫杨花词 苏轼
似花还似非花,也无人惜从教坠。
抛家傍路,思量却是,无情有思。
萦损柔肠,闲酣娇眼,欲开还闭。
梦随风万里,寻郎去处,又还被,莺呼起。
不恨此花飞尽,恨西园|落红难缀。
晓来雨过,遗踪何在?一池萍碎。
春色三分,二分尘土,一分流水。
细看来,不是杨花,点点是离人泪。

水调歌头 苏轼
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
*子由:苏轼弟苏辙。

明月几时有?把酒问青天。
不知天上宫阙,今夕是何年?
我欲乘风归去,又恐琼楼玉宇,高处不胜寒。
起舞弄清影,何似在人间?
转朱阁,低绮户,照无眠。
不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。

念奴娇 苏轼
大江东去,浪淘尽、千古风流人物。
故垒西边,人道是、三国周郎赤壁。
乱石穿空,惊涛拍岸,卷起千堆雪。
江山如画,一时多少豪杰。
遥想公瑾当年,小乔初嫁了,雄姿英发。
羽扇纶巾,谈笑间,樯橹灰飞烟灭。
故国神游,多情应笑我,早生华发。
人生如梦,一尊还酹江月。

西江月 苏轼
世事一场大梦,人生几度秋凉。
夜来风叶已鸣廊。看取眉头鬓上。
酒贱常愁客少,月明多被云妨。
中秋谁与共孤光。把盏凄然北望。

西江月 苏轼
顷在黄州,春夜行蕲水中。过酒家,饮酒醉,乘月至一溪桥上,解鞍,曲肱醉卧
少休。及觉已晓,乱山攒拥、流水锵然,疑非尘世也。书此语桥柱上。
照野弥弥浅浪,横空隐隐层霄。
障泥未解玉骢娇,我欲醉眠芳草。
可惜一溪风月,莫教踏碎琼瑶。
解鞍欹枕绿杨桥,杜宇一声春晓。

临江仙 夜归临皋 苏轼
夜饮东坡醒复醉,归来仿佛三更。
家童鼻息已雷鸣。
敲门都不应,倚伏听江声。
长恨此身非我有,何时忘却营营。
夜阑风静A*纹平。
小舟从此逝,江海寄余生。

A*(hu2)=士宝盖+丝系底+没有的没的右一半

定风波 苏轼
三月七日,沙湖道中遇雨。雨具先去,同行皆狼狈,余独不觉。已而逐晴,故作此。
莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒。微冷。山头斜照却相迎。
回首向来萧瑟处。归去。也无风雨也无晴。

卜算子 黄州定慧院寓居作 苏轼
缺月挂疏桐,漏断人初静。
谁见幽人独往来?缥渺孤鸿影。
惊起却回头,有恨无人省。
拣尽寒枝不肯栖,寂寞沙洲冷。

洞仙歌 苏轼
余七岁时,见眉州老尼,姓朱,忘其名,年九十余。自言尝随其师入蜀主孟昶宫中。
一日,大热,蜀主与花蕊夫人夜纳凉摩诃池上,作一词。朱且能记之。今四十年,朱死
已久矣,人无知此词者,但记其首两句,暇日寻味,岂《洞仙歌令》乎?乃为足之云。
冰肌玉骨,自清凉无汗。水殿风来暗香满。
绣帘开,一点明月窥人,人未寝,欹枕钗横鬓乱。
起来携素手,庭户无声,时见疏星渡河汉。
试问夜如何?夜已三更,金波淡,玉绳低转。
但屈指、西风几时来?又不道、流年暗中偷换。

江城子 密州出猎 苏轼
老夫聊发少年狂,左牵黄,右擎苍。
锦帽貂裘,千骑卷平冈。
为报倾城随太守,亲射虎,看孙郎。
酒酣胸胆尚开张,鬓微霜,又何妨!
持节云中,何日遣冯唐?
会挽雕弓如满月,西北望,射天狼。

江城子 乙卯正月二十日夜记梦 苏轼
十年生死两茫茫,不思量,自难忘。
千里孤坟,无处话凄凉。
纵使相逢应不识,尘满面,鬓如霜。
夜来幽梦忽还乡,小轩窗,正梳妆。
相顾无言,唯有泪千行。
料得年年肠断处,明月夜,短松冈。

蝶恋花 苏轼
花褪残红青杏小,
燕子飞时,绿水人家绕。
枝上柳绵吹又少,天涯何处无芳草。
墙里秋千墙外道。
墙外行人,墙里佳人笑。
笑渐不闻声渐悄,多情却被无情恼。

永遇乐 苏轼
彭城夜宿燕子楼,梦盼盼,因作此词。
明月如霜,好风如水,清景无限。
曲港跳鱼,圆荷泻露,寂寞无人见。
A*如三豉,铿然一叶,黯黯梦云惊断。
夜茫茫,重寻无处。觉来小园行遍。
天涯倦客,山中归路,望断故园心眼。
燕子楼空,佳人何在?空锁楼中燕。
古今如梦,何曾梦觉,但有旧欢新怨。
异时对,黄楼夜景,为余浩叹。

A*(dan3)=绞丝旁+耽误的耽的右一半

浣溪沙 苏轼
游蕲水清泉寺。寺临兰溪,溪水西流。
山下兰芽短浸溪,松间沙路净无泥。
萧萧暮雨子规啼。
谁道人生无再少?门前流水尚能西。
休将白发唱黄鸡。

浣溪沙 苏轼
簌簌衣巾落枣花,村南村北响缲车。
牛衣古柳卖黄瓜。
酒困路长惟欲睡,日高人渴漫思茶。
敲门试问野人家。

卷五 北宋词

卜算子 李之仪
我住长江头,君住长江尾。
日日思君不见君,共饮长江水。
此水几时休,此恨何时已。
只愿君心似我心,定不负相思意!

减字木兰花 竞渡 黄裳
红旗高举,飞出深深杨柳渚。
鼓击春雷,直破烟波远远回。
欢声震地,惊退万人争战气。
金碧楼西,衔得锦标第一归。

眼儿媚 王A*
A*(fang1)=雨字头+方圆的方
杨柳丝丝弄轻柔,烟缕织成愁。
海棠未雨,梨花先雪,一半春休。
而今往事难重省,归梦绕秦楼。
相思只在,丁香枝上,豆蔻梢头。

念奴娇 黄庭坚
八月十七日,同诸甥步自永安城楼,过张宽大园待月。偶有名酒,因以金荷
酌众客。客有孙彦立,善吹笛。援笔作乐府长短句,文不加点。
断虹霁雨,净秋空。山染修眉新绿。
桂影扶疏,谁便道,今夕清辉不足?
万里青天,A*娥何处,驾此一轮玉?
寒光零乱,为谁偏照B*C*?
年少从我追游,晚凉幽径,绕张园森木。
共倒金荷、家万里、难得尊前相属。
老子平生,江南江北,最爱临风笛。
孙郎微笑,坐来声喷霜竹。

A*(huan2)=女字旁+永恒的恒的右一半
B*(ling2)=酉字旁+雨字头+三个并排的口字
C*(lu4)=酉字旁+录用的录

水调歌头 游览 黄庭坚
瑶草一何碧,春入武陵溪。
溪上桃花无数,花上有黄鹂。
我欲穿花寻路,直入白云深处,浩气展虹霓。
只恐花深里,红露湿人衣。
坐玉石,倚玉枕,拂金徽。
谪仙何处?无人伴我白螺杯。
我为灵芝仙草,不为朱唇丹脸,长啸亦何为。
醉舞下山去,明月逐人归。

清平乐 黄庭坚
春归何处?寂寞无行路。
若有人知春去。唤取归来同住。
春无踪迹谁知?除非问取黄鹂。
百啭无人能解。因风飞过蔷薇。

鹧鸪天 黄庭坚
座中有眉山隐客史应之和前韵,即席答之。
黄菊枝头生晓寒,人生莫放酒杯干。
风前横笛斜吹雨,醉里簪花倒着冠。
身健在,且加餐,舞裙歌板尽清欢。
黄花白发相牵挽,付与时人冷眼看。

浣溪沙 晁端礼
清润风光雨后天,蔷薇花谢绿窗前。
碧疏璃瓦欲生烟。
十里闲情凭蝶梦,一春幽怨付鲲弦。
小楼今夜月重圆。

洞仙歌 李元膺
一年春物,惟梅柳间意味最深。至莺花烂漫时,则春已衰迟。使人无复新意。予作
《洞仙歌》,使探春者歌之,无后时之悔。
雪云散尽,放晓晴池院。
杨柳于人便青眼。
更风流多处,一点梅心,相映远。
约略颦轻笑浅。
一年春好处,不在浓芳,小艳疏香最娇软。
到清明时候,百紫千红,花正乱,已失春风一半。
早占取韶光,共追游,但莫管春寒,醉红自暖。

渔家傲 朱服
小雨纤纤风细细,万家杨柳青烟里。
恋树湿花飞不起。
愁无比,和春付与东流水。
九十光阴能有几?金龟解尽留无计。
寄语东城沽酒市。
拚一醉,而今乐事他年泪。 青门饮 寄宠人 时彦
胡马嘶风,汉旗翻雪,彤云又吐,一竿残照。
古木连空,乱山无数,行尽暮沙衰草。
星斗樱花幽馆,夜无眠,灯花空老。
雾浓香鸭,冰凝泪烛,霜天难晓。
长记小妆才了。一杯未尽,离怀多少。
醉里秋波,梦中朝雨,都是醒时烦恼。
斜有牵情处,忍思量,耳边曾道。
甚时跃马归来,认得迎门轻笑。

望海潮 秦观
梅英疏淡,冰澌溶泄,东风暗换年华。
金谷俊游,铜驼巷陌,新晴细履平沙。
长记误随车,正絮翻蝶舞,芳思交加。
柳下桃蹊,乱分春色到人家。
西园夜饮鸣笳。有华灯碍月,飞盖妨花。
兰苑未空,行人渐老,重来是事堪嗟。
烟暝酒旗斜,但倚楼极目,时见栖鸦。
无奈归心,暗随流水到天涯。

八六子 秦观
倚危亭。
恨如芳草,萋萋划尽还生。
念柳外青骢别后,水边红袂分时,怆然暗惊。
无端天与娉婷,夜月一帘幽梦,春风十里柔晴。
怎奈向、欢娱渐随流水,素弦声断,翠绡香减;
那堪片片飞花弄晚,蒙蒙残雨笼晴。
正销凝,黄鹂又啼数声。

满庭芳 秦观
山抹微云,天连衰草,画角声断谯门。
暂停征棹,聊共引离尊。
多少蓬莱旧事,空回首,烟霭纷纷。
斜阳外,寒鸦万点,流水绕孤村。
销魂,当此际,香囊暗解,罗带轻分。
谩赢得青楼,薄幸名存。
此去何时见也?襟袖上,空惹啼痕。
伤情处,高城望断,灯火已黄昏。

鹊桥仙 秦观
纤云弄巧,飞星传恨,银汉迢迢暗度。
金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路?
两情若是久长时,又岂在朝朝暮暮。

千秋岁 秦观
水边沙外,城郭春寒退。
花影乱,莺声碎。
飘零疏酒盏,离别宽衣带。
人不见,碧云暮合空相对。
忆昔西池会,A*鹭同飞盖。
携手处,今谁在?
日边清梦断,镜里朱颜改。
春去也,飞红万点愁如海。

A*(wan3)=宛如的宛+鸟字旁

踏莎行 秦观
雾失楼台,月迷津渡。
桃源望断无寻处。
可堪孤馆闭春寒,杜鹃声里斜阳暮。
驿寄梅花,鱼传尺素。
砌成此恨无重数。
郴江幸自绕郴山,为谁流下潇湘去?

浣溪沙 秦观
漠漠轻寒上小楼,晓阴无赖似穷秋。
淡烟流水画屏幽。
自在飞花轻似梦,无边丝雨细如愁。
宝帘闲挂小银钩。

行香子 秦观
树绕村庄,水满陂塘。
倚东风,豪兴徜徉。
小园几许,收尽春光。
有桃花红,李花白,菜花黄。
远远围墙,隐隐茅堂。
A*青旗,流水桥傍。
偶然乘兴,步过东冈。
正莺儿啼,燕儿舞,蝶儿忙。

A*(yang2)=风字旁+扬长避短的扬的右一半

半死桐 思越人 亦名鹧鸪天 贺铸
重过阊门万事非,同来何事不同归?
梧桐半死清霜后,头白鸳鸯失伴飞。
原上草,露初A*。旧栖新垅两依依。
空床卧听南窗雨,谁复挑灯夜补衣!

A*(xi1)=日字旁+希望的希

杵声齐 近古捣练子 贺铸
砧面莹,杵声齐。
捣就征衣泪墨题。
寄到玉关应万里,戍人犹在玉关西。

芳心苦 踏莎行 贺铸
杨柳回塘,鸳鸯别浦。
绿萍涨断莲舟路。
断无峰蝶慕幽香,红衣脱尽芳心苦。
返照迎潮,行云带雨。
依依似与骚人语。
当年不肯嫁春风,无端却被秋风误。

横塘路 青玉案 贺铸
凌波不过横塘路,但目送,芳尘去。
锦瑟华年谁与度?
月桥花院,琐窗朱户,只有春知处。
飞云冉冉蘅皋暮,彩笔新题断肠句。
若问闲情都几许?
一川烟草,满城风絮,梅子黄时雨。

六州歌头 贺铸
少年侠气,交情五都雄。
肝胆洞,毛发耸。
立谈中,死生同。一诺千金重。
推翘勇,矜豪纵。
轻盖拥,联飞A*,斗城东。
轰饮酒垆,春色浮寒瓮,吸海垂虹。
间呼鹰嗾犬,白羽摘雕弓,狡穴俄穴。
乐匆匆!
似黄梁梦,辞丹凤。
明月共,漾孤篷。
官冗从,怀倥偬,落尘笼。
簿书丛,B*弁如云众。
供粗用,忽奇功。
笳鼓动,渔阳弄,思悲翁。
不请长缨,系取天骄种,剑吼西风。
恨登山临水,手寄七弦桐,目送归鸿。

A*(kong1)=革字旁+天空的空
B*(he4)=歇息的歇的左边+鸟字旁

石州引 贺铸
薄雨初寒,斜照弄晴,春意空阔。
长亭柳色才黄,远客一枝先折。
烟横水际,映带几点归鸦,东风销尽龙沙雪。
还记出关来,恰而今时节。
将发,画楼芳酒,红泪清歌,顿成轻别。
回首经年,杳杳音尘都绝。
欲知方寸,共有几许新愁,芭蕉不展丁香结。
枉望断天涯,两厌厌风月。

南柯子 忆旧 僧仲殊
十里青山远,潮平路带沙。
数声啼鸟怨年华。
又是凄凉时候在天涯。
白露收残月,清风散晓霞。
绿杨堤,畔问荷花。
记得年时沽酒那人家。

摸鱼儿 东皋寓居 晁补之
买陂塘,旋栽杨柳,依稀淮岸湘浦。
东皋嘉雨新痕涨,沙嘴鹭来鸥聚。
堪爱处,最好是,一川夜月光流渚,无人独舞。
任翠幄张天,柔茵藉地,酒尽未能去。
青绫被,莫忆金闺故步,儒冠曾把身误。
弓刀千骑成何事?荒了邵平瓜圃。
君试觑,满青镜,星星鬓影今如许,功名浪语。
便似得班超,封侯万里,归计恐迟暮。

盐角儿 毫社观海 晁补之
开时似雪,谢时似雪,花中奇绝。
香非在蕊,香非在萼,骨中香彻。
古溪风,留溪月,堪羞损,山桃如血。
直饶更,疏疏淡淡,终有一般情别。 秋蕊香 张耒
帘幕疏疏风透,一线香飘金兽。
朱栏倚遍黄昏后,廊上月华如昼。
别离滋味浓于酒,著人瘦。
此情不及墙东柳,春色年年如旧。

卷六 北宋词

瑞龙吟 周邦彦
章台路,还见褪粉梅梢,试花桃树。
A*A*坊陌人家,定巢燕子,归来旧处。
黯凝伫,因念个人痴小,午窥门户。
侵晨浅约宫黄,障风映袖,盈盈笑语。
前度刘郎重到,访邻寻里,同时歌舞。
惟有旧家秋娘,声价如故。
吟笺赋笔,犹记燕台句。
知谁伴,名园露饮,东城闲步?
事与孤鸿去,控春尽是,伤离意绪。
官柳低金缕,归骑晚,纤纤池塘飞雨。
断肠院落,一帘风絮。 A*(an4)=竖心旁+声音的音

满庭芳 夏日溧水无想山作 周邦彦
风老莺雏,雨肥梅子,午阴嘉树清圆。
地卑山近,衣润费炉烟。
人静乌鸢自乐,小桥外,新绿溅溅。
凭栏久,黄芦苦竹,疑泛九江船。
年年,如社燕,飘流瀚海,来寄修椽。
且莫思身外,长近尊前。
憔悴江南倦客,不堪听,急管繁弦。
歌筵畔,先安簟枕,容我醉时眠。

苏幕遮 周邦彦
燎沉香,消溽暑。
鸟雀呼晴,侵晓窥檐语。
叶上初阳干宿南。水面清圆,一一风荷举。
故乡遥,何日去?
家住吴门,久作长安旅。
五月渔郎相忆否?小楫轻舟,梦入芙蓉浦。

浣溪沙 周邦彦
翠葆参差竹径成,新荷跳雨碎珠倾。
曲阑斜转小池亭。
风约帘衣归燕急,水摇扇影戏鱼惊。
柳梢残日弄微晴。

少年游 周邦彦
并刀如水,吴盐胜雪,纤手破新橙。
锦幄初温,兽烟不断,相对坐调笙。
低声问:向谁行宿?城上已三更。
马滑霜浓,不如休去,直是少人行。

夜游宫 周邦彦
叶下斜阳照水,卷轻浪,沉沉千里。
桥上酸风射眸子。
立多时,看黄昏,灯火市。
古屋寒窗底,听几片,井桐飞坠。
不恋单衾再三起。
有谁知,为萧娘,书一纸。

解语花 元宵 周邦彦
风销焰蜡,露A*红莲,灯市光相射。
桂华流瓦,纤云散,耿耿素娥欲下。
衣裳淡雅,看楚女,纤腰一把。
萧鼓喧,人影参差,满路飘香麝。
因念都城放夜,望千门如昼,嬉笑游冶。
钿车罗帕,相适处,自有暗尘随马。
年光是也,唯只见,旧情衰谢。
清漏移,飞盖归来,从舞休歌罢。

A*(yi4)=三点水+城邑的邑

六丑 蔷薇谢后作 周邦彦
正单衣试酒,怅客里光阴虚掷。
愿春暂留,春归如过翼,一去无迹。
为问花何在?夜来风雨,葬楚宫倾国。
钗钿堕处遗香泽。乱点桃蹊,轻翻柳陌。
多情为谁追惜?但蜂媒蝶使,时叩窗A*。
东园岑寂,渐蒙笼暗碧。
静绕珍丛底,成叹息。
长条故惹行客。似牵衣待话,别情无极。
残英小,强簪巾帻。
终不似,一朵钗头颤袅,向人欹侧。
漂流处,莫趁潮汐。
恐断红尚有相思字,何由见得。

A*(ge4)=木字旁+隔绝的隔的右一半

兰陵王 周邦彦
柳阴直,烟里丝丝弄碧。
隋堤上,曾见几番,拂水飘绵送行色。
登临望故国。谁识,京华倦客?
长亭路,年去年来,应折柔条过千尺。
闲寻旧踪迹,又酒趁哀弦,灯照离席。
梨花榆火催寒食。
愁一箭风快,半篙波暖,回头迢递便数驿,望人在天北。
凄侧,恨堆积。
渐别浦萦回,津堠岑寂。斜阳冉冉春无极。
念月榭携手,露桥闻笛。
沉思前事,似梦里,泪暗滴。

西河 金陵怀古 周邦彦
佳丽地,南朝盛事谁记?
山围故国绕清江,髻鬟对起。
怒涛寂寞打孤城,风樯遥度天际。
断崖树,犹倒倚,莫愁艇子曾系。
空余旧迹郁苍苍,雾沉半垒。
夜深月过女墙来,伤心东望淮水。
酒旗戏鼓甚处市?想依稀、王谢邻里。
燕子不知何世,入寻常巷陌人家,相对如说兴亡,斜阳里。

蝶恋花 早行 周邦彦
月皎惊乌栖不定。
更漏将阑,辘轳牵金井。
唤起两眸清炯炯。泪花落枕红绵冷。
执手霜风吹鬓影。
去意徊徨,别语愁难听。
楼上阑干横斗柄,露寒人远鸡相应。

玉楼春 周邦彦
桃溪不作从容住,秋藕绝来无续处。
当年相候赤栏桥,今日独寻黄叶路。
烟中列岫青无数,雁背夕阳红欲暮。
人如风后入江云,情似雨余粘地絮。

千秋岁 谢逸
楝花飘砌,蔌蔌清香细。
梅雨过,A*风起。
情随湘水远,梦绕吴峰翠。
琴书倦,鹧鸪唤起南窗睡。
密意无人寄,幽恨凭谁洗?
修竹畔,疏帘里。
歌余尘拂扇,舞罢风掀袂。
人散后,一钩淡月天如水。

A*(pin2)=草字头+频繁的频

惜分飞 富阳僧舍代作别语 毛滂
泪湿阑干花着露,愁到眉峰碧聚。
此恨平分取。更无言语空相觑。
断雨残云无意绪,寂寞朝朝暮暮。
今夜山深处,断魂分付潮回去。

水调歌头 叶梦得
秋色渐将晚,霜信报黄花。
小窗低户深映,微路绕欹斜。
为问山公何事,坐看流年轻度,拚却鬓双华。
徙倚望沧海,天净水明霞。
念平昔,空飘荡,遍天涯。
归来三径重扫,松竹本吾家。
却恨悲风时起,冉冉云间新雁,边马怨胡笳。
谁似东山老,谈笑静胡沙。

点疑唇 绍兴乙卯登绝顶小亭 叶梦得
缥渺危亭,笑谈独在千峰上。
与谁同赏,万里横烟浪。
老去情怀,犹作天涯想。
空惆怅。
少年豪放,莫学衰翁样。

点绛唇 汪藻
新月娟娟,夜寒江静山衔斗。
起来搔首,梅影横窗瘦。
好个霜天,闲却传杯手。
君知否?
乱鸦啼后,归兴浓于酒。

青玉案 曹组
碧山锦树明秋霁,路转陡,疑无地。
忽有人家临曲水。
竹篱茅舍,酒旗沙岸,一族成村市。
凄凉只恐乡心起,风楼远,回头慢凝睇。
何处今宵孤馆里?
一声征雁,半窗残月,总是离人泪。

三台 清明应制 万俟咏
见梨花初带夜月,海棠半含朝雨。
内苑春,不禁过青门,御沟涨,潜通南浦。
东风静,细柳垂金缕,望风阙,非烟非雾。
好时代,朝野多欢,遍九陌,太平箫鼓。
乍莺儿百啭断续,燕子飞来飞去。
近绿水,台榭晚秋千,斗草聚,双双游女。
饧香更,酒冷踏青路,会暗识,夭桃朱户。
向晚骤,宝马雕鞍,醉襟惹,乱花飞絮。
正轻寒轻暖漏永,半阴半晴云暮。
禁火天,已是试新妆,岁华到。三分佳处。
清明看,汉宫传蜡炬,散翠烟,飞入槐府。
敛兵卫,阊阖门开,住传宣,又还休务。

水龙吟 朱敦儒
放船千里凌波去,暗为吴山留顾。
云屯水府,涛附神女,九江东注。
北客翩然,壮心偏感,年华将暮。
念伊嵩旧隐,巢山旧友,南柯梦,遽如许。
回首妖氛未扫,问人间,英雄何处?
奇谋报国,可怜无用,尘昏白羽。
铁锁横江,锦帆冲浪,孙郎良苦。
但愁敲桂棹,悲吟梁父,泪流如雨。

好事近 渔父词 朱敦儒
摇首出红尘,醒醉更无时节。
活计绿蓑青笠,惯披霜冲雪。
晚来风定约丝闲,上下是新月。
千里水天一色,看孤鸿明灭。

相见欢 朱敦儒
金陵城上西楼,倚清秋。
万里夕阳垂地大江流。
中原乱,簪缨散,几时收?
试倩悲风吹泪过扬州。

鹧鸪天 周紫芝
一点残红欲尽时,乍凉秋气满屏帏。
梧桐叶上三更雨,叶叶声声是别离。
调宝瑟,拨金猊,那时同唱鹧鸪词。
如今风雨西楼夜,不听清歌也泪垂。

燕山亭 北行见杏花 赵佶
裁剪冰绡,轻叠数重,淡着燕脂匀注。
新样靓妆,艳溢香融,羞杀蕊珠宫女。
易得凋零,更多少,无情风雨。
愁苦,问院落凄凉,几番春暮?
凭寄离恨重重,这双燕,何曾会人言语?
天遥地远,万水千山,知他故宫何处?
怎不思量,除梦里,有时曾去。
无据,和梦也,新来不做。

渔家傲 李清照
天接云涛连晓雾,星河欲转千帆舞。
仿佛梦魂归帝所。
闻天语,殷勤问我归何处?
我报路长嗟日暮,学诗谩有惊人句。
九万里风鹏正举。
风休住,蓬舟吹取三山去。

如梦令 二首 李清照
常记溪亭日暮,沉醉不知归路。
兴尽晚回舟,误入藕花深处。
争渡,争渡,惊起一滩鸥鹭。

昨夜雨疏风骤,浓睡不消残酒。
试问卷帘人,却道海棠依旧。
知否?知否?应是绿肥红瘦。

凤凰台上忆吹箫 李清照
香冷金猊,被翻红浪,起来慵白梳头。
任宝奁尘满,日上帘钩。
生怕离怀别苦,多少事,欲说还休。
新来瘦,非干病酒,不是悲秋。
休休。这回去也,千万遍阳关,也则难留。
念武陵人远,烟锁秦楼。
惟有楼前流水,应念我,终日凝眸。
凝眸处,从今又添,一段新愁。

一剪梅 李清照
红藕香残玉簟秋,轻解罗裳,独上兰舟。
云中谁寄锦书来?雁字回时,月满西楼。
花自飘零水自流,一种相思,两处闲愁。
此情无计可消除,才下眉头,却上心头。

蝶恋花 李清照
暖雨晴风初破冻。
柳眼梅腮,已觉春心动。
酒意试情谁与共?泪融残粉花钿重。
乍试夹衫金缕缝。
山枕斜欹,枕损钗头凤。
独抱浓愁无好梦,夜阑犹剪灯花弄。

醉花阴 李清照
薄雾浓云愁永昼,瑞脑消金兽。
佳节又重阳,玉枕纱厨,半夜凉初透。
东篱把酒黄昏后,有暗香盈袖。
莫道不消魂,帘卷西风,人比黄花瘦。

武陵春 李清照
风住尘香花已尽,日晚倦梳头。
物是人非事事休,欲语泪先流。
闻说双溪春尚好,也拟泛轻舟。
只恐双溪舴艋舟,载不动,许多愁。

声声慢 李清照
寻寻觅觅,冷冷清清,凄凄惨惨戚戚。
乍暖还寒时候,最难将息。
三杯两盏淡酒,怎敌他,晚来风急。
雁过也,正伤心,却是旧时相识。
满地黄花堆积。憔悴损,如今有谁堪摘?
守着窗儿,独自怎生得黑?
梧桐更兼细雨,到黄昏,点点滴滴。
这次第,怎一个愁字了得。

点绛唇 李清照
蹴罢秋千,起来慵整纤纤手。
露浓花瘦,薄汗轻衣透。
见有人来,袜划金钗溜。
和羞走,倚门回首,却把青梅嗅。

卷七 南宋词

采桑子 吕本中
恨君不似江楼月,南北东西。
南北东西。
只有相随无别离。
恨君却似江楼月,暂满还亏。
暂满还亏。
待得团圆是几时?

忆秦娥 向子A*
A*(yan4)=言字旁+湮灭的湮的右一半
芳菲歇,故园目断伤心切。
伤心切。
无边烟水,无穷山色。
可堪更近乾龙节,眼中泪尽空啼血。
空啼血。
子规声外,晓风残月。

长相思 蔡伸
村姑儿,红袖衣。
初发黄梅插稻时,双双女伴随。
长歌诗,短歌诗。
歌里真情恨别离,休言伊不知。

苍梧谣 蔡伸
天。休使圆蟾照客眠。
人何在,桂影自婵娟。

忆王孙 春词 李重元
萋萋芳草忆王孙,柳外楼高空断魂。
杜宇声声不忍闻。
欲黄昏,雨打梨深闭门。

临江仙 夜登小阁忆洛中旧游 陈与义
忆昔午桥桥上饮,坐中多是豪英。
长沟落月去无声。
杏花疏影里,吹笛到天明。
二十余年如一梦,此身虽在堪惊。
闲登小阁看新晴。
古今多少事,渔唱起三更。

贺新郎 寄李伯纪丞相 张元干
曳杖危楼去,斗垂天,沧波万顷,月流烟渚。
扫尽浮云风不定,未放扁舟夜渡。
宿雁落,寒芦深处。
怅望关河空吊影,正人间鼻息鸣鼍鼓。
谁伴我,醉中舞?
十年一梦扬州路,倚高寒、愁生故国、气吞骄虏。
要斩楼兰三尽剑,遗恨琵琶旧语。
谩暗涩,铜华尘土。
唤取谪仙平章看,过苕溪尚许垂纶否?
风浩荡,欲飞举。

贺新郎 送胡邦衡待制赴新州 张元干
梦绕神州路,怅秋风,连营画角,故宫离黍。
底事昆仑倾砥柱,九地黄流乱注?
聚万落,千村狐兔。
天意从来高难问,况人情老易悲难诉。
更南浦,送君去。
凉生岸柳催残暑。耿斜河、疏星淡月,断云微度。
万里江山知何处?回首对床夜语。
雁不到、书成谁与?
目尽青天怀今古,肯儿曹恩怨相尔汝!
举大白,听金缕。

柳梢青 杨无咎
茅舍疏篱,半佩残雪,斜卧低枝。
可更相宜:烟笼修竹,月在寒溪。
宁宁伫立移时,判瘦损,无妨为伊。
谁赋才情,画成幽思,写入新诗?

饮马歌 曹勋
此腔自虏中传至边。饮牛马即横笛吹之。不鼓不怕,声甚凄断。闻兀术每遇对阵之际,
吹此则麝战无还期也。
边头春未到,雪满交河道。
暮沙明残照,塞峰云间小。
断鸿悲,陇月低。
泪湿征衣悄,岁华老。

满江红 岳飞
怒发冲冠,凭栏处,潇潇雨歇。
抬望眼,仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲,白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭?
驾长车踏破,贺兰山缺。
壮志饥餐胡虏肉,舌谈渴饮匈奴血。
待从头、收拾旧山河,朝天阙。

霜天晓角 蛾眉亭 韩元吉
倚天绝壁,直下江千尺。
天际两蛾凝黛,愁于恨,几时极?
怒潮风正急,酒醒闻塞笛。
试问谪仙何处?青山外,远烟碧。

眼儿媚 朱淑真
迟迟春日弄轻柔,花径暗香流。
清明过了,不堪回首,云锁朱楼。
午窗睡起莺声巧,何处唤春愁?
绿杨影里,海棠亭畔,红杏梢头。

谒金门 春半 朱淑真
春已半,触目此情无限。
十二阑干闲倚遍,愁来天不管。
好是风和日暖,输与莺莺燕燕。
满院落花帘不卷,断肠芳草远。

蝶恋花 送春 朱淑真
楼外垂杨千万缕。
欲系青春,少住春还去。
犹自风前飘柳絮,随春且看归何处。
绿满山川闻杜宇。
便做无情,莫也愁人苦?
把酒送春春不语,黄昏却下潇潇雨。

踏莎行 山居 张抡
秋入云山,物情潇洒。
百般景物堪图画。
丹枫万叶碧云边,黄花千点幽岩下。
已喜佳辰,更怜清夜。
一轮明月林梢挂。
松醪常与野人烟,忘形共说清闲话。

瑞鹤仙 袁去华
郊原初遇雨,见败叶零乱,风定犹舞。
斜阳挂深树,映浓愁浅黛,遥山眉妩。
来时旧路,尚岩石花,娇黄半吐。
到而今,唯有溪边流水,见人如故。
无语,邮亭深静,下马还寻,旧曾题处。
无聊倦族,伤离恨,最愁苦。
纵收香藏镜,他年重到,人面桃花在否?
念沉沉,小阁幽窗,有时梦去。

钗头凤 陆游
红酥手,黄滕酒,满城春色宫墙柳。
东风恶,欢情薄。
一杯愁绪,几年离索,错,错,错!
春如旧,人空瘦,旧痕红A*鲛B*透。
桃花落,闲池阁。
山盟虽在,锦书难托,莫,莫,莫!

A*(yi4)=三点水+城邑的邑
B*(xiao1)=鱼字旁+消失的消的右一半

秋波媚 七月十六日晚登高兴亭望长安南山 陆游
秋到边城角声哀,烽火照高台。
悲歌击筑,凭高酹酒,此兴悠哉。
多情谁似南山月,特地暮云开。
灞桥烟柳,曲江池馆,应待人来。

卜算子 咏梅 陆游
驿外断桥边,寂寞开无主。
已是黄昏独自愁,更兼风和雨。
无意苦争春,一任群芳妒。
零落成泥碾作尘,只有香如故。

夜游宫 记梦寄师伯浑 陆游
雪晓清笳乱起,梦游处,不知何地。
铁骑无声望似水。
想关河,雁门西,青海际。
睡觉寒灯里,漏声断,月斜窗纸。
自许封侯在万里。
有谁知,鬓虽残,心未死。

鹊桥仙 陆游
华灯纵博,雕鞍驰射,谁记当年豪举?
酒徒一一取封侯,独去作,江边渔父。
轻舟八尺,低篷三扇,占断A*洲烟雨。
镜湖元自属闲人,又何必,君恩赐与。

A*(pin2)=草字头+频繁的频

诉衷情 陆游
当年万里觅封侯,匹马戍梁州。
关河梦断何处?尘暗旧貂裘。
胡未灭,鬓先秋,泪空流。
此生谁料,心在天山,身老沧洲。

谢池春 陆游
壮岁从戎,曾是气吞残虏。
阵云高,狼烽夜举。
朱颜青鬓,拥雕戈西戍。
笑儒冠、自来多误。
功名梦断,却泛扁舟吴楚。
漫悲歌,伤怀吊古。
烟波无际,望秦关何处?
叹流年,又成虚度。

蝶恋花 范成大
春涨一篙添水面。
芳草鹅儿,绿满微风岸。
画舫夷犹湾百转,横塘塔近依前远。
江国多寒农事晚。
村北村南,谷雨才耕遍。
秀麦连冈桑叶贱,看看尝面收新茧。

昭君怨 赋松上鸥 杨万里
晚饮诚斋,忽有一鸥来泊松上,已而复去,感而赋之。
偶听松梢扑鹿,知是沙鸥来宿。
稚子莫喧哗,恐惊他。
俄顷忽然飞去,飞去不知何处。
我已乞归休。报沙鸥。

好事近 七月十三日夜登万花川谷望月作 杨万里
月未到诚斋,先到万花川谷。
不是诚斋无月,隔一林修竹。
如今才是十三夜,月色已如玉。
未是秋光奇绝,看十五十六。

卷八 南宋词

卜算子 严蕊
不是爱风尘,似被前缘误。
花落花开自有时,总赖东君主。
云也终须去,住也如何住。
若得山花插满头,莫问奴归处。

六州歌头 张孝祥
长淮望断,关塞莽然平。
征尘暗,霜风劲,悄边声,黯销凝。
追想当年事,殆天数,非人力。
洙泗上,弦歌地,亦膻腥。
隔水毡乡,落日牛羊下,区脱纵横。
看名王宵猎,骑火一川明。
笳鼓悲鸣,遣人惊。
念腰间箭,匣中剑,空埃蠹,竞何成。
时易失,心徒壮,岁将零,渺神京。
干羽方怀远,静烽燧,且休兵。
冠盖使,纷驰鹜,若为情。
闻道中原遗老,常南望,翠葆霓旌。
使行人到此,忠愤气填膺,有泪如倾。

水凋歌头 和庞佑父 张孝祥
雪洗虏尘静,风约楚云留。
何人为写悲壮?吹角古城楼。
湖海平生豪气,关塞如今风景,剪烛看吴钩。
剩喜然犀处,骇浪与天浮。
忆当年,周与谢,富春秋。
小乔初嫁,香囊未解,勋业故优游。
赤壁矶头落照,肥水桥边衰草,渺渺唤人愁。
我欲乘风去,击楫誓中流。

念奴娇 过洞庭 张孝祥
洞庭青草,近中秋,更无一点风色。
玉鉴琼田三万顷,着我扁舟一叶。
素月分辉,明河共影,表里俱澄澈。
悠然心会,妙处难与君说。
应念岭表经年,孤光自照,肝胆皆冰雪。
短发萧骚襟袖冷,稳冷沧溟空阔。
尽吸西江,细甚斟北斗,万象为宾客。
扣舷独笑,不知今夕何夕。

西江月 张孝祥
问讯湖边春色,重来又是三年。
东风吹我过湖船,杨柳丝丝拂面。
世路如今已惯,此心到处悠然。
寒光亭下水如天,飞起沙鸥一片。

西江月 阻风三峰下 张孝祥
满载一船秋色,平铺十里湖光。
波神留我看斜阳,放起鳞鳞细浪。
明日风回更好,今宵露宿何妨。
水晶宫里奏霓裳,准拟岳阳楼上。

临江仙 暮春 赵长卿
过尽征鸿来尽燕,故园消息茫然。
一春憔悴有谁怜。
怀家寒食夜,中酒落花天。
见说江头春浪渺,殷勤欲送归船。
别来此处最萦牵。
短篷南浦雨,疏柳断桥烟。

南柯子 王炎
山冥云阴重,天寒雨意浓。
数枝幽艳湿啼红。
莫为惜花惆怅,对东风。
蓑笠朝朝出,沟塍处处通。
人间辛苦是三农。
要得一犁水足,望年丰。

摸鱼儿 辛弃疾
淳熙己亥,自湖北漕移湖南,同官王正之置酒小山亭,为赋。
更能消,几番风雨,匆匆春又归去。
惜春长恨花开早,何况落红无数。
春且住!见说道、天涯芳草无归路。
怨春不语,算只有殷勤、画檐蛛网,尽日惹飞絮。
长门事,准拟佳期又误,娥眉曾有人妒。
千金纵买相如赋,脉脉此情谁诉?
君莫舞,君不见,玉环飞燕皆尘土。
闲愁最苦,休去倚危栏,斜阳正在,烟柳断肠处。

水龙吟 登建康赏心亭
楚天千里清秋,水随天去秋无际。
遥岑远目,献愁供恨,玉簪螺髻。
落日楼头,断鸿声里,江南游子。
把吴钩看了,栏杆拍遍,无人会,登临意。
休说鲈鱼堪脍。尽西风、季鹰归未?
求田问舍,怕应羞见,刘郎才气。
可惜流年,忧愁风雨,树犹如此!
倩何人唤取,红巾翠袖,A*英雄泪。

A*(wen3)=提手旁+温度的温的右一半

菩萨蛮 书江西造口壁 辛弃疾
郁孤台下清江水,中间多少行人泪。
西北望长安,可怜无数山。
青山遮不住,毕竟东流去。
江晚正愁予,山深闻鹧鸪。

青玉案 元夕 辛弃疾
东风夜放花千树,更吹落,星如雨。
宝马雕车香满路。
风箫声动,玉壶光转,一夜鱼龙舞。
蛾儿雪柳黄金缕,笑语盈盈暗香去。
众里寻他千百度。
蓦然回首,那人却在,灯火阑珊处。

清平乐 村居 辛弃疾
茅檐低小,溪上青青草。
醉里吴音相媚好,白发谁家翁媪?
大儿锄豆溪东,中儿正织鸡笼。
最喜小儿无赖,溪头卧剥莲蓬。

清平乐 独宿博山王氏庵 辛弃疾
绕床饥鼠,蝙蝠翻灯舞。
屋上松风吹急雨,破纸窗间自语。
平生塞北江南,归来华发苍颜。
布被秋宵梦觉,眼前万里江山。

水龙吟 过南剑双溪楼 辛弃疾
举头西北浮云,倚天万里须长剑。
人言此地,夜深常见,斗牛光焰。
我觉山高,潭空水冷,月明星淡。
待燃犀下看,凭栏却怕,风雷怒,鱼龙惨。
峡束苍江对起,过危楼,欲飞还敛。
元龙老矣,不妨高卧,冰壶凉簟。
千古兴亡,百年悲笑,一时登览。
问何人又卸,片帆沙岸,系斜阳缆?

西江月 夜行黄沙道中 辛弃疾
明月别枝惊鹊,清风半夜鸣蝉。
稻花香里说丰年,听取蛙声一片。
七八个星天外,两三点雨山前。
旧时茅店社林边,路转溪桥忽见。

贺新郎 辛弃疾
别茂嘉十二弟。鹈A*、杜鹃实两种。见《离骚补注》。
A*(guai4)=快慢的快的右一半为左边+鸟字旁
绿树听鹈A*。更那堪,鹧鸪声住,杜鹃声切。
啼到春归无寻处,苦恨芳菲都歇。
算未抵,人间离别。
马上琵琶关塞黑,更长门翠辇辞金阙。
看燕燕,送归妾。
将军百战声名裂,向河梁、回头万里,故人长绝。
易水萧萧西风冷,满座衣冠似雪。
正壮士,悲歌未彻。
啼鸟还知如许恨,料不啼清泪长啼血。
谁共我,醉明月?

贺新郎 辛弃疾
邑中园亭,仆皆为赋此词。一日,独坐停云,水声山色,竞来相娱。意溪山欲
援例者。遂作数语,庶几仿佛渊明思亲友之意云。
甚矣吾衰矣。怅平生、交流零落,只今余几?
白发空垂三千丈,一笑人间万事。
问何物,能令公喜?
我见青山多妩媚,料青山见我应如是。
情与貌,略相似。
一尊搔首东窗里,想渊明,停云诗就,此时风味。
江左沉酣求名者,岂识浊醪妙理?
回首叫,云飞风起。
不恨古人吾不见,恨古人不见吾狂耳。
知我者,二三子。

丑奴儿 书博山道中壁 辛弃疾
少年不识愁滋味,爱上层楼。
爱上层楼。为赋新词强说愁。
而今识尽愁滋味,欲说还休。
欲说还休,却道天凉好个秋。 太常引 建康中秋为吕叔潜赋 辛弃疾
一轮秋影转金波,飞镜又重磨。
把酒问A*娥,被白发,欺人奈何?
乘风好去,长空万里,直下看山河。
斫去桂婆娑。人道是,清光更多。

A*(huan2)=女字旁+永恒的恒的右一半

破阵子 为陈同甫赋壮语以寄 辛弃疾
醉里挑灯看剑,梦回吹角连营。
八百里分麾下炙,五十弦翻塞外声。
沙场秋点兵。
马作的卢飞快,弓如霹雳弦惊。
了却君王天下事,赢得生前身后名。
可怜白发生!

鹧鸪天 辛弃疾
有客慨然谈功名,因追念少年时事,戏作。
壮岁旌旗拥万夫,锦A*突骑渡江初。
燕兵夜B*银胡C*,汉箭朝飞金仆姑。
追往事,叹今吾,春风不染白髭须。
却将万字平戎策,换得东家种树书。

A*(chan1)=衣示旁+瞻仰的瞻的右一半
B*(chuo4)=女字旁+足够的足
整理。
C*(lu4)=革字旁+录用的录

西江月 遣兴 辛弃疾
醉里且贪欢笑,要愁那得工夫。
近来始觉古人书,信著全无是处。
昨夜松边醉倒,问松:“我醉何如?”
只疑松动要来扶。以手推松曰:“去!”

永遇乐 京口北固亭怀古 辛弃疾
千古江山,英雄无觅,孙仲谋处。
舞榭歌台,风流总被,雨打风吹去。
斜阳草树,寻常巷陌,人道寄奴曾住。
想当年,金戈铁马,气吞万里如虎。
元嘉草草,封狼居胥,赢得仓皇北顾。
四十三年,望中犹记,烽火扬州路。
可堪回首,佛狸祠下,一片神鸦社鼓。
任谁问,廉颇老矣,尚能饭否?

南乡子 登京口北固亭有怀 辛弃疾
何处望神州?满眼风光北固楼。
千古兴亡多少事,悠悠。不尽长江滚滚流。
年少万兜鍪,坐断东南战未休。
天下英雄谁敌手?曹刘。生子当如孙仲谋。

水龙吟 程垓
夜来风雨匆匆,故园定是花无几。
愁多愁极,等闲孤负,一年芳意。
柳困花慵,杏青梅小,对人容易。
算好春长在,好花长见,元只是,人憔悴。
回首池南旧事,恨星星,不堪重记。
如今但有,看花老眼,伤时清泪。
不怕逢花瘦,只愁怕、老来风味。
待繁红乱处,留云借月,也须拚醉。

卜算子 石孝友
见也如何暮,别也如何遽。
别也应难见也难,后会难凭据。
去如何去,住也如何住。
住也应难去也难,此际难分付。

水调歌头 送章德茂大卿使虏 陈亮
不见南师久,漫说北群空。
当场只手,毕竟还我万夫堆。
自笑堂堂汉使,得似洋洋河水,依旧只流东。
且复穹庐拜,会向藁街逢。
尧之都,舜之壤,禹之封。
于中应有,一个半个耻臣戎。
万里腥膻如许,千古英灵安在?磅礴几时通?
胡运何须问,赫日自当中。

水龙吟 春恨 陈亮
闹花深处层楼,画帘半卷东风软。
春归翠陌,平莎茸嫩,垂杨金浅。
迟日催花,淡云阁雨,轻寒轻暖。
恨芳菲世界,游人未赏,都付与,莺和燕。
寂寞凭高念远,向南楼,一声归雁。
金钗斗草,青丝勒马,风流云散。
罗绶分香,翠绡封泪,几多幽怨?
正销魂、又是疏烟淡月,子规声断。

沁园春 刘过
寄辛承旨,时承旨诏,不赴。
斗酒彘肩,风雨渡江,岂不快哉!
被香山居士,约林和靖,与城仙老,驾勒吾回。
坡谓:“西湖,正如西子,浓抹淡妆临照台。”
二公者,皆掉头不顾,只管传杯。
白言:“天竺去来,图画里峥嵘楼阁开。
爱纵横二涧,东西水绕;两峰南北,高下云堆。”
逋曰:“不然,暗香浮动,不若孤山先访梅。
须晴去,访稼轩未晚,且此徘徊。”

唐多令 刘过
安远楼小集,侑觞歌板之黄其姓者。乞词于龙洲道人词人自号。为赋此《唐多令》。
同柳阜之、刘去非、石民瞻、周嘉仲、陈孟参、孟容。时八月五日也。
芦叶满汀洲,寒沙带浅流。
二十年,重过南楼。
柳下系舟犹未稳,能几日、又中秋?
黄鹤断矶头,故人今在否?
旧江山,浑是新愁。
欲买桂花同载酒,终不是、少年游。

西江月 贺词 刘过
堂上谋臣尊俎,边头将士干戈。
天时地利与人和。“燕可伐欤?”曰:“可”。
今日楼台鼎鼎,明年带砺山河。
大家齐唱大风歌,不日四方来贺。

卷九 南宋词

点绛唇 丁未冬过吴松作 姜夔
燕雁无心,太湖西畔随云去。
数峰清苦,商略黄昏雨。
第四桥边,拟共天随住。
今何许?凭栏怀古。
残柳参差舞。

踏莎行 姜夔
自沔东来,丁未元日,至金陵,江上感梦而作。
燕燕轻盈,莺莺娇软。
分明又向华胥见。
夜长争得薄情知?春初早被相思染。
别后书辞,别时针线。
离魂暗逐郎行远。
淮南皓月冷千山,冥冥归去无人管。

齐天乐 姜夔
丙辰岁,与张功父会饮张达可之堂。闻屋壁间蟋蟀有声。功父约予同赋,以授歌者。
功父先成,辞甚美。予徘徊茉莉花间,仰见秋月,顿起幽怨,寻亦得此。蟋蟀,中都呼为
促织,善斗。好事者或以三、二十万钱致一枚,镂象齿为楼观以贮之。
庾郎先自吟愁赋,凄凄更闻私语。
露湿铜铺,苔侵石井,都是曾听伊处。
哀音似诉,正思妇无眠,起寻机杼。
曲曲屏山,夜凉独自甚情绪?
西窗又吹暗雨。
为谁频断续,相和砧杵。
候馆迎秋,离宫吊月,别有伤心无数。
豳诗谩与,笑篱落呼灯,世间儿女。
写入琴丝,一声声更苦。

念奴娇 姜夔
予客武陵,湖北宪治在焉。古城野水,乔木参天。予与二三友日荡舟其间,薄荷花而饮,意象
幽闲,不类人境。秋水且涸,荷叶出地寻丈。因列坐其下,上不见日。清风徐来,绿云自动,间于
疏处窥见游人画船,亦一乐也。A*来吴兴,数得相羊荷花中。又夜泛西湖,光景奇绝,故以此句写之。
A*(jie2)=来去的去+竭力的竭的右一半
闹红一舸,记来时,尝与鸳鸯为侣。
三十六陂人未到,水佩风裳无数。
翠叶吹凉,玉容销酒,更洒菰蒲雨。
嫣然摇动、冷香飞上诗句。
日暮,青盖亭亭,情人不见,争忍凌波去?
只恐舞衣寒易落,愁入西风南浦。
高柳垂阴,老鱼吹浪,留我花间住。
田田多少,几回沙际归路。

八归 湘中送胡德华 姜夔
芳莲坠粉,疏桐吹绿,庭院暗雨乍歇。
无端抱影销魂处,还见筱墙萤暗,藓阶蛩切。
送客重寻西去路,问水面琵琶谁拨?
最可惜,一片江山,总付与啼鸠。
长恨相从未款,而今何事,又对西风离别?
渚寒烟淡,棹移人远,缥缈行舟如叶。
想文君望久,倚竹愁生步罗袜。
归来后,翠尊双饮,下了珠帘,玲珑闲看月。

扬州慢 姜夔
淳熙丙申至日,予过维扬,夜雪初霁,荠麦弥望。入其城,则四顾萧条,寒水自碧。暮色渐起,
戍角悲吟,予怀怆然,感慨今昔。因自度此曲,千岩老人以为有黍离之悲也。
淮左名都,竹西佳处,解鞍少驻初程。
过春风十里,尽荠麦青青。
自胡马窥江去后,废池乔木,犹厌言兵。
渐黄昏,清角吹寒,都在空城。
杜郎俊赏,算而今,重到须惊。
纵豆蔻词工,青楼梦好,难赋深情。
二十四桥仍在,波心荡,冷月无声。
念桥边红药,年年知为谁生。

长亭怨慢 姜夔
予颇喜自制曲,初率意为长短句,然后协以律,故前后阕多不同。桓大司马云:“昔年种柳,依依
汉南;今看摇落,凄怆江潭。树犹如此,人何以堪。”此语余深爱之。
渐吹尽,枝头香絮,是处人家,绿深门户。
远浦萦回,暮帆零乱向何许?
阅人多矣,谁得似,长亭树。
树若有情时,不会得,青青如此。
日暮,望高城不见,只见乱山无数。
韦郎去也,怎忘得,玉环分付。
第一是,早早归来,怕红萼,无人为主。
算空有并刀,难剪离愁千缕。

淡黄柳 姜夔
客居合肥南城赤栏桥之西,巷陌凄凉,与江左异,唯柳色夹道,依依可怜。因度此阕,以纾客怀。
空城晓角,吹入垂杨陌。
马上单衣寒恻恻。
看尽鹅黄嫩绿,都是江南旧相识。
正岑寂。明朝又寒食。
强携酒,小桥宅,怕梨花落尽成秋色。
燕燕飞来,问春何在?唯在池塘自碧。

暗香 姜夔
辛亥之冬,予载雪诣石湖。止既月,授简索句。且征新声。作此两曲。石湖把玩不已,使工妓习之。
音节谐婉。乃名之曰:《暗香》、《疏影》。
旧时月色,算几番照我,梅边吹笛。
唤起玉人,不管清寒与攀摘。
何逊而今渐老,都忘却,春风词笔。
但怪得,竹外疏花,香冷入瑶席。
江国。正寂寂。叹寄与路遥,夜雪初积。
翠尊易泣,红萼无言耿相忆。
长记曾携手处,千树压,西湖寒碧。
又片片,吹尽地,几时见得?

疏影 姜夔
苔枝缀玉,有翠禽小小,枝上同宿。
客里相逢,篱角黄昏,无言自倚修竹。
昭君不惯胡沙远,但暗忆,江南江北。
想佩环,月夜归来,化作此花幽独。
犹记深宫旧事,那人正睡里,飞近蛾绿。
莫似春风,不管盈盈,早与安排金屋。
还教一片随波去,又却怨,玉龙哀曲。
等恁时,重觅幽香,已入小窗横幅。

风入松 俞国宝
一春长费花钱,日日醉湖边。
玉骢惯识西湖路,骄嘶过,沽酒楼前。
红杏香中箫鼓,绿杨影里秋千。
暖风十里丽人天,花压鬓云偏。
画船载取春归去,余情付,湖山湖烟。
明日重扶残醉,来寻陌上花钿。

减字木兰花 卢炳
莎衫筠笠。正是村村农务急。
绿水千畦,惭愧秧针出得齐。
风斜雨细,麦欲黄时寒又至。
A*妇耕夫,画作今年稔岁图。

A*(ye4)=食字旁+磕碰的磕的右一半 双双燕 咏燕 史达祖
过春社了,度帘幕中间。去年尘冷。
差池欲往,试入旧巢相并。
还相雕梁藻井,又软语商量不定。
飘然快指花梢,翠尾分开红影。
芳径,芹泥雨润。
爱贴地争飞,竞夸轻俊。
红楼归晚,看足柳昏花暝。
应自栖香正稳。便忘了、天涯芳信。
愁损翠黛双蛾,日日画栏独凭。

绮罗香 咏春雨 史达祖
做冷欺花,将烟困柳,千里偷催春暮。
尽日冥迷,愁里欲飞还住。
惊粉重,蝶宿西园,喜泥润,燕归南浦。
最妨它,佳约风流,钿车不到杜陵路。
沉沉江上望极,还被春潮晚急,难寻官渡。
隐约遥峰,和泪谢娘眉妩。
临断岸,新绿生时,是落红,带愁流处。
记当日,门掩梨花,剪灯深夜语。

宴清都 初春 卢祖皋
春讯飞琼管,风日薄,度墙啼鸟声乱。
江城次第,笙歌翠合,绮罗香暖。
溶溶涧渌冰泮,醉梦里,年华暗换。
料黛眉重锁隋堤,芳心还动梁苑。
新来雁阔云音,鸾分鉴影,无计重见。
啼春细雨,笼愁淡月,恁时庭院。
离肠未语先断。算犹有,凭高望眼。
更那堪,芳草连天,飞梅弄晚。

霜天晓角 仪真江上夜泊 黄机
寒江夜宿,长啸江之曲。
水底鱼龙惊动,风卷地,浪翻屋。
诗情吟未足。酒兴断还续。
草草兴亡休问,功名泪,欲盈掬。

玉楼春 春思 严仁
春风只在园西畔,荠菜花繁蝴蝶乱。
冰池晴绿照还空,香径落红吹已断。
意长翻恨游丝短,尽日相思罗带缓。
宝奁明月不欺人,明日归来君试看。

泌园春 答九华叶贤良 刘克庄
一卷阴符,二石硬弓,百斤宝刀。
更玉花骢喷,鸣鞭电抹,乌丝阑展,醉墨龙跳。
牛角书生,虬髯豪客,谈笑皆堪折简招。
依稀记,曾请缨系粤,草檄征辽。
当年目视云宵,谁信道,凄凉今折腰。
怅燕然未勒,南归草草,长安不见,北望迢迢。
老去胸中,有些垒块,歌罢犹须着酒浇。
休休也,但帽边鬓改,镜里颜凋。

贺新郎 送陈真州子华 刘克庄
北望神州路,试平章,这场公事,怎生分付?
记得太行山百万,曾入宗爷驾驭。
今把作,握蛇骑虎。
君去京东豪杰喜,想投戈,干拜真吾父。
谈笑里,定齐鲁。
两河萧瑟惟孤兔。问当年,祖生去后,有人来否?
多少新亭挥泪客,谁梦中原块土?
算事业,须由人做。
应笑书生心胆怯,向车中,闭置如新妇。
空目送,塞鸿去。

贺新郎 九日 刘克庄
湛湛长空黑,更那堪,斜风细雨,乱悉如织。
老眼平生空四海,赖有高楼百尺。
看浩荡,千崖秋色。
白发书生神州泪,尽凄凉,不向牛山滴。
追往事,去无迹。
少年自负凌云笔,到而今,春华落尽,满怀萧瑟。
常恨世人新意少,爱说南朝狂客。
把破帽,年年拈出。
若对黄花孤负酒,怕黄花,也笑人岑寂。
鸿北去,日西匿。

一剪梅 刘克庄
余赴广东,实之夜饯于风亭。
束A*宵行十里强。
挑得诗囊,抛了衣囊。
天寒路滑马蹄僵。
元是王郎,来送刘郎。
酒酣耳热说文章。
惊倒邻墙,推倒胡床。
旁观拍手笑疏狂。
疏又何妨,狂又何妨。

A*(yun4)=绞丝旁+温暖的温的右一半

玉楼春 戏林推 刘克庄
年年跃马长安市,客舍似家家似寄。
青钱换酒日无何,红烛呼卢宵不寐。
易挑锦妇机中字,难得玉人心下事。
男儿西北有神州,莫滴水西桥畔泪。 卜算子 刘克庄
片片蝶衣轻,点点猩红少。
道是天公不惜花,百种千般巧。
朝见树头繁,暮见枝头少。
道是天公果惜花,雨洗风吹了。

清平乐 五月十五夜玩月 刘克庄
风高浪快,万里骑蟾背。
曾识A*娥真体态,素面原无粉黛。
身游银阙珠宫,俯看积气蒙蒙。
醉里偶摇桂树,人间唤作凉风。

A*(huan2)=女字旁+永恒的恒的右一半

湘春夜月 黄孝迈
近清明,翠禽枝上消魂。
可惜一片清歌,都付与黄昏。
欲共柳花低诉,怕柳花轻薄,不解伤春。
念楚乡旅宿,柔情别绪,谁与温存。
空尊夜泣,青山不语,残照当门。
翠玉楼前,惟是有,一波湘水,摇荡湘云。
天长梦短,问甚时,重见桃根?
这次第,算人间没个并刀,剪断心上愁痕。

青玉案 黄公绍
年年杜日停针线,怎忍见,双飞燕。
今日江城春已半。
一身犹在,乱山深处,寂寞溪桥畔。
春衫着破谁针线?点点行行泪痕满。
落日解鞍芳草岸。
花无人戴,酒无人劝,醉也无人管。

长相思 陈东甫
花深深,柳阴阴,度柳穿花觅信音。
君心负妾心。
愚鸣琴,恨孤衾,钿誓钗盟何处寻?
当初谁料今。

水调歌头 平山堂用东城韵 方岳
秋雨一何碧,山色倚晴空。
江南江北愁思,分付酒螺红。
芦叶蓬舟千重,菰菜莼羹一梦,无语寄归鸿。
醉眼渺河洛,遗恨夕阳中。
A*洲外,山欲暝,剑眉峰。
人间俯仰陈迹,叹息两仙翁。
不见当时杨柳,只是从前烟雨,磨灭几英雄。
天地一孤啸,匹马又西风。

A*(pin2)=草字头+频繁的频

卷十 南宋词

浣溪沙 吴文英
门隔花深梦旧游,夕阳无语燕归愁。
玉纤香动小帘钩。
落絮无声春堕泪,行云有影月含羞。
东风临夜冷于秋。

风入松 吴文英
听风听雨过清明,愁草瘗花铭。
楼前绿暗分携路,一丝柳,一寸柔情。
料峭春寒中酒,交加晓梦啼莺。
西园日日扫林亭。依旧赏新晴。
黄蜂频扑秋千索,有当时,纤手香凝。
惆怅双鸳不到,幽阶一夜苔生。

莺啼序 吴文英
残寒正欺病酒,掩沉香绣户。
燕来晚,飞入西城,似说春事迟暮。
画船载,清明过却,晴烟冉冉吴宫树。
念羁情游荡,随风化为轻絮。
十载西湖,傍柳系马,趁娇尘软雾。
溯红渐,招入仙溪,锦儿偷寄幽素。
倚银屏,春宽梦窄,断红湿,歌纨金缕。
暝堤空,轻把斜阳,总还鸥鹭。
幽兰渐老,杜若还生,水乡尚寄旅。
别后访,六桥无信,事往花委,瘗玉埋香,几番风雨。
长波妒盼,遥山羞黛,渔灯分影春江宿,记当时,短楫桃根渡。
青楼仿佛,临分败壁题诗,泪墨惨淡尘土。
危亭望极,草色天涯,叹鬓侵半苎。
暗点检,离痕欢唾,尚染鲛绡,A*迷归,破鸾慵舞。
殷勤待写,书中长恨,蓝霞辽海沉过雁,漫相思,弹入哀筝柱。
伤心千里江南,怨曲重招,断魂在否?

A*(duo3)=享受的享+单一的单

八声甘州 陪庾幕诸公游灵岩 吴文英
渺空烟四远,是何年,青天坠长星?
幻苍崖云树,名娃金屋,残霸宫城。
箭径酸风射眼,腻水染花腥。
时A*双鸳响,廊叶秋声。
宫里吴王沉醉,倩五湖倦客,独钓醒醒。
问苍波无语,华发奈山青。
水涵空,阑干高处,送乱鸦,斜日落渔汀。
连呼酒,上琴台去,秋与云平。

A*(ji2)=革字旁+及时的及

唐多令 惜别 吴文英
何处合成愁?离人心上秋。
纵芭蕉,不雨也飕飕。
都道晚凉天气好,有明月,怕登楼。
年事梦中休,花空烟水流。
燕辞归,客尚淹留。
垂柳不萦裙带住,漫长是,系行舟。

南乡子 题南剑州妓馆 潘A*
A*(fang3)=牛字旁+方圆的方
生怕倚阑干,阁下溪声阁外山。
惟有旧时山共水,依然。
暮雨朝云去不还。
应是蹑飞鸾,月下时时整佩环。
月又渐低霜又下,更阑。
折得梅花独自看。

贺新郎 游西湖有感 文及翁
一勺西湖水,渡江来,百年歌舞,百年酣醉。
回首洛阳花石尽,烟渺黍离之地。
更不复,新亭堕泪。
簇乐红妆摇画舫,问中流击楫何人是?
千古恨,几时洗?
余生自负澄清志,更有谁、A*溪未遇,傅岩未起?
国事如今谁倚仗?衣带一江而已。
便都道,江神堪恃。
借问孤山林处士,但掉头,笑指梅花蕊。
天下事,可知矣。

A*(pan1)=石字旁+一番风雨的番

谒金门 李好古
花过雨,又是一番红素。
燕子归来愁不语,旧巢无觅处。
谁在玉关劳苦?谁在玉楼歌舞?
若使胡尘吹得去,东风侯万户。

西江月 新秋写兴 刘辰翁
天上低昂似旧,人间儿女成狂。
夜来处处试新妆,却是人间天上。
不觉新凉似水,相思两鬓如霜。
梦从海底跨枯桑,阅尽银河风浪。

柳梢青 春感 刘辰翁
铁马蒙毡,银花洒泪,春入愁城。
笛里番腔,街头戏鼓,不是歌声。
那堪独坐青灯,想故国,高台月明。
辇下风光,山中岁月,海上心情。

兰陵王 丙子送春 刘辰翁
送春去,春去人间无路。
秋千外,芳草连天,谁遣风沙暗南浦?
依依甚意绪?漫忆海门飞絮。
乱鸦过,斗转城荒,不见来时试灯处。
春去,最谁苦?但箭雁沉边,梁燕无主。
杜鹃声里长门暮。想玉树凋土,泪盘如露。
咸阳送客屡回顾,斜日未能度。
春去。尚来否?正江今恨别,庾信愁赋。
苏堤尽日风和雨,叹神游故国,花记前度。
人生流落,顾孺子,共夜语。

永遇乐 刘辰翁
余白乙亥上元,诵李易安《永遇乐》,为之涕下,今三年矣!每闻此词,辄不自堪。遂依其声。
又托之易安自喻,虽辞情不及,而悲苦过之。
璧月初晴,黛云远淡,春事谁主?
禁苑娇寒,湖堤倦暖,前度遽如许。
香尘暗陌,华灯明昼,长是懒携手去。
谁知道,断烟禁夜,满城似愁风雨。
宣和旧日,临安南渡,芳景犹自如故。
缃帙流离,风鬟三五,能赋词最苦。
江南无路,A*州今夜,此苦又谁知否?
空相对,残B*无寐,满村社鼓。

A*(lu4)=梅花鹿的鹿+右耳刀
B*(gang1)=金字旁+工人的工

曲游春 周密
禁烟湖上薄游,施中山赋词甚佳,余因次其韵。盖平时游舫,至午后则尽入里湖,抵暮始出。
断桥小驻而归。非习于游者不知也。
故中山极击节余“闲却半湖春色”之句。谓能道人之所未云。
禁苑东风外,A*暖丝晴絮,春思如织。
燕约莺期,恼芳情偏在,翠深红隙。
漠漠香尘隔,沸十里,乱弦从笛。
看画船,尽入西泠,闲却半湖春色。
柳陌。新烟凝碧。映帘底宫眉,堤上游勒。
轻暝笼寒,怕梨云梦冷,杏香愁幂。
歌管酬寒食,奈蝶怨,良宵岑寂。
正满湖,碎月摇花,怎生去得?

A*(yang2)=风字旁+扬长避短的扬的右一半 闻鹊喜 吴山观涛 周密
天水碧,染就一江秋色。
鳌戴雪山龙起蛰,快风吹海立。
数点烟鬟青滴,一杼霞绡红湿。
白鸟明边帆影直,隔江闻夜笛。

一萼红 登蓬莱阁有感 周密
步深幽。正云黄天淡,雪意未全休。
鉴曲寒沙,茂林烟草,俯仰千古悠悠。
岁华晚,飘零渐远,谁念我,同载五湖舟?
磴古松斜,崖阴苔老,一惩清愁。
回首天涯归梦,几魂飞西浦,泪洒东州。
故国山川,故园心眼,还似王粲登楼。
最负他,秦鬟妆镜,好江山,何事此时游?
为唤狂吟老监,共赋消忧。

满江红 王清惠
太液芙蓉,浑不似,旧时颜色。
曾记得,春风雨露,玉楼金阙。
名播兰馨妃后里,晕潮莲脸君王侧。
忽一声,鼙鼓揭天来,繁华歇。
龙虎散,风云灭,千古恨,凭谁说?
对山河百二,泪盈襟血。
驿馆夜惊尘土梦,宫车晓碾关山月。
问A*娥,于我肯从容,同圆缺。

A*(huan2)=女字旁+永恒的恒的右一半

念奴娇 驿中言别 邓剡
水天空阔,恨东风,不借世间英物。
蜀鸟吴花残照里,忍见荒城颓壁。
铜雀春情,金人秋泪,此恨凭谁雪?
堂堂剑气,斗牛空认奇杰。
那信江海余生,南行万里,属扁舟齐发。
正为鸥盟留醉眼,细看涛生云灭。
睨柱吞赢,回旗走懿,千古冲冠发。
伴人无寐,秦淮应是孤月。

酹江月 和 文天祥
乾坤能大,算蛟龙,元不是池中物。
风雨牢愁无着处,那更寒蛩四壁。
横槊题诗,登楼作赋,万事空中雪。
江流如此,方来还有英杰。
堪笑一叶飘零,重来淮水,正凉风新发。
镜里朱颜都变尽,只有丹心难灭。
去去龙沙,江山回首,一线青如发。
故人应念,杜鹃枝上残月。

眉妩 新月 王沂孙
渐渐痕悬柳,淡彩穿花,依约破初暝。
便有团圆意,深深拜,相逢谁在香径?
画眉未稳,料素娥,犹带离恨。
最堪爱,一曲银钩小,宝帘挂秋冷。
千古盈亏休问,叹漫磨玉斧,难补金镜。
太液池犹在,凄凉处,何人重赋清景?
故山夜水,试待他,窥户端正。
看云外山河,还老尽,桂花影。

齐天乐 蝉 王沂孙
一襟余恨宫魂断,年年翠阴庭树。
乍咽凉柯,还移暗叶,重把离愁深诉。
西窗过雨,怪瑶佩流空,玉筝调柱。
镜暗妆残,为谁娇鬓尚如许?
铜仙铅泪似洗,叹携盘去远,难贮零露。
病翼惊秋,枯阅世,消得斜阳几度?
余音更苦,甚独抱清高,顿成凄楚?
漫想熏风,柳丝千万缕。

高阳台 和周草窗寄越中诸友韵 王沂孙
残雪庭阴,轻寒帘影,霏霏玉管春葭。
小贴金泥,不知春在谁家。
相思一夜窗前梦,奈个人,水隔天遮。
但凄然,满树幽香,满地横斜。
江南自是离愁苦,况游骢古道,归雁平沙。
怎得银笺,殷勤说与年华。
如今处处生芳草,纵凭高,不见天涯。
更消他,几度东风,几度飞花。

梅花引 荆溪阻雪 蒋捷
白鸥问我泊孤舟,是身留?是心留?
心若留时,何事锁眉头?
风拍小帘灯晕舞,对闲影,冷清清,忆旧游。
旧游旧游今在否?花在楼,柳下舟。
梦也梦也,梦不到,寒水空流。
漠漠黄云,湿透木绵裘。
都道无人愁似我,今夜雪,有梅花,似我愁。

一剪梅 舟过吴江 蒋捷
一片春悉待酒浇。
江上舟摇,楼上帘招。
秋娘渡与秦娘桥。
风又飘飘,雨又萧萧。
何日归家洗客袍?
银字笙调,心字香烧。
流光容易把人抛。
红了樱桃。绿了芭蕉。

虞美人 听雨 蒋捷
少年听雨歌楼上,红烛昏罗帐。
壮年听雨客舟中,江阔云低,断雁叫西风。
而今听雨僧庐下,鬓已星星也。
悲欢离合总无情,一任阶前,点滴到天明。

高阳台 西湖春感 张炎
接叶巢莺,平波卷絮,断桥斜日归船。
能几番游?看花又是明年。
东风且伴蔷薇住,到蔷薇,春已堪怜。
更凄然,万绿西泠,一抹荒烟。
当年燕子知何处?但苔深韦曲,草暗斜川。
见说新愁,如今也到鸥边。
无心再续笙歌梦,掩重门,浅醉闲眠。
莫开帘,怕见飞花,怕听啼鹃。

甘州 张炎
辛卯岁,沈尧道同余北归,各处杭、越。逾岁,尧道来问道寞,语笑数日,又复别去,赋此曲。
并寄赵学舟。
记玉关踏雪事清游,寒气脆貂裘。
傍枯林古道,长河饮马,此意悠悠。
短梦依然江表,老泪洒西州。
一字无题处,落叶都愁。
载取白云归去,问谁留楚佩,弄影中洲。
折芦花赠远,零落一身秋。
向寻常,野桥流水,待招来,不是旧沙鸥。
空怀感,有斜阳处,却怕登楼。

清平乐 张炎
采芳人杳,顿觉游情少。
客里看春多草草,总被诗愁分了。
云年燕子天涯,今年燕子谁家?
三月休听夜雨,如今不是催花。

<全文完>

2005年06月07日









2005年06月05日

 

此主题相关图片如下:
按此在新窗口浏览图片警察冲上看台

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷01

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷02

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷03

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷04


此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷05

此主题相关图片如下:
按此在新窗口浏览图片警察殴打有过激行为的球迷06

此主题相关图片如下:
按此在新窗口浏览图片警察不允许记者采访并打记者

此主题相关图片如下:
按此在新窗口浏览图片冲突中受伤的记者

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷01

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷02

此主题相关图片如下:
按此在新窗口浏览图片被殴打的球迷03

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法01

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法02

此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法03


此主题相关图片如下:
按此在新窗口浏览图片警察的行为引起公愤3000余名球迷围在体育场外要求给个说法

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)01

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)02

此主题相关图片如下:
按此在新窗口浏览图片新乡公安局政委出面向群众解释道歉(他指示警察冲上看台殴打球迷)03

此主题相关图片如下:
按此在新窗口浏览图片冲突过后的看台01

此主题相关图片如下:
按此在新窗口浏览图片冲突过后的看台02

白羊座 — 贾森.基德
贾森基德的全能无人能比,网上曾经做过一项调查:谁是联盟中最好的控球后卫。结果贾森基德高居榜首。当初从太阳被交换到糟糕透顶的网队,基德凭着自己坚强的意志和过人的能力两次把网队送进了决赛。和许许多多的白羊座男人一样,他狂热的爱着电玩游戏。在他体内,始终充满着白羊的激情与活力。基德始终相信,只要坚持,新泽西会有属于自己的戒指。


金牛座 — 蒂姆.邓肯
全联盟最好的大前锋是谁?答案当然是邓肯。他手上的两枚总冠军戒指已经证明了一切。每场“两双”的表现对他来说只是家常便饭。心理学毕业的他不像联盟中其他的球星一样张扬,他的篮球技术不花哨,但是却很实用。有人说他不爱笑,太木纳。其实正因为这样,金牛的稳定塌实的优点才会在他身上展现的一览无余。


双子座 — 艾弗森
该用什么词来形容这位联盟中最强的组织后卫呢?灵活、敏捷、迅速、孤傲、另类、搞怪……我想任何一个形容词都概括不了他。仅仅一米八三的身高却能在篮下快速奔跑穿越,然后轻松上篮得分。即使国王韦伯来到了76人,也无法撼动他老大的位置。同样,双子座爱搞怪的他还拥有全联盟最多的纹身,而且,他还是自己公司的ABK音乐组合的CEO。我们始终期待,今年再次拿到MVP的他会有更出色的表现。


巨蟹座 — 雷.阿伦
精准无比的射篮,娴熟优雅的技术,俊朗出众的相貌,这一切刻画出一个独一无二的君子射手雷.阿伦。从小在英国长大的他继承了英国绅士的风范,待人和蔼,充满阳光。这在嚣张惯了的NBA里是极为罕见的。也许这就是巨蟹座与生具来的特质。不过也有人职责巨蟹座的他作风不够硬朗,但这并不妨碍他成为这个联盟里硕果仅存的靠中远投立足的超级球星。


狮子座 — 吉诺.比利
NBA名宿查尔斯·巴克利曾经说过:“每个人都应该成为吉诺比利的球迷!”这番话虽然带着个人的感情色彩,但却也不是不无道理的。吉诺比利球风诡异,总能做出一些匪夷所思的高级动作,几乎每个动作都充满了表演性。狮子座的他无时无刻不忘在场上表现着自己。这个阿根廷男人从小就热爱比赛,拥有很强的好胜心,然而这一切,都奠定了如今他在联盟中的稳定地位。


发贴IP已设置保密 2005-06-03 15:59
       


     乐天 帅哥哟,离线,有人找我吗?

    
    
    头衔:禹州红魔会(光杆)
    等级:红魔会员
    威望:1
    文章:284
    积分:430
    注册:2005-04-09

给乐天发送一个短消息 把乐天加入好友 查看乐天的个人资料 搜索乐天在的所有贴子 点击这里发送电邮给乐天 访问乐天的主页引用回复这个贴子 回复这个贴子 2
发贴心情
处女座 — 姚明
这里没有人会对这个名字感到陌生,他已经成为了中国通往NBA的一个重要渠道。许多中国人都是因为他才去真正了解NBA的。3年里,他已经从一个初来乍到的毛头小子成长为NBA的超级明星。现在的他,已经成为火箭不可或缺的一份子。处女座的他对待每一场比赛都非常认真,极力追求完美,就像2004年奥运会上他会为队友或自己的某一个失误而懊恼半天。当然,要成为鲨鱼那样的巨星姚明还有待磨练,也许这一刻就会出现在不远的将来。


天秤座 — 杰梅因.奥尼尔
人们之所以称他为小奥尼尔不仅仅是因为他和鲨鱼的名字相似,而是他和鲨鱼一样,在自己的队中有着不可动摇的地位。虽然才25岁,但小奥尼尔已经在NBA打到了第八年,成为东部头号大前锋。带着两颗光芒四射的大钻石耳坠,当别人问起谁的发型最酷时,他的回答是自己。喜欢把自己扮的十分靓仔的天秤小奥尼尔很率直,也很真诚。他曾经说过:“请牢记,小奥尼尔不一定比大奥尼尔差!”


天蝎座 — 阿玛雷.斯塔德迈尔
“小霸王”是他在联盟中的绰号,正如同他打球一样,浑身充满霸气与活力,几乎每一次的进球都是大力的把球灌进篮框,看得人热血沸腾。家庭的不幸使他从小就沉默寡言,从13岁开始,他就像大人一样处理事情。但他从不缺少信心,如今的他已经成为了太阳的娇子,这个有着天蝎座坚强意志的小霸王正在一步步走向自己的辉煌。


射手座 — 约什.史密斯
射手座的爱玩是出了名的,看过今年全明星扣篮大赛的人们一定都记住了一个名字。没错,他就是今年在全明星扣篮大赛上拿到100分,成为新一届扣篮王的新秀约什.史密斯。在这之前,也许人们对他还不是太了解,但看过他的精彩扣篮之后,你不禁会感叹,篮球能被他玩成这样,这一切,还不足以证明他的未来是无限光明的吗?

魔羯座 — 勒布朗.詹姆斯
2003的选秀大会上被骑士选中,两年后他便成为了皇帝级的人物。“小皇帝”勒布朗-詹姆斯是历史上最伟大的高中生球星之一。他是一个罕见的篮球天才。魔羯座的他本着对篮球的执着在球场上总是游刃有余,一个小孩子现在就能够一个人挑起骑士的复兴大任,毫不夸张地说他将要成为下一个乔丹只不过是时间的问题。

水瓶座 — 纳什
只要你登陆NBA网站,每次都会看到纳什的助攻排在首位。这位助攻王已经成为了太阳的核心,他大局感强,投篮精准,尤善最后时刻的致命一击。另人意想不到的是这位篮球巨星却有着深厚的足球情结,可能水瓶座的人思维永远会出乎人们的意料吧。而这位助攻王的中远投也非常出色,只要球队需要,他就可以完成得分任务。也许,这就是领袖。

双鱼座 — 沙奎尔.奥尼尔
最后我们来说一下这个不得不说的人物—-“大鲨鱼”奥尼尔。他可是篮球运动史上最伟大的中锋之一。他能像短跑运动员一样的冲刺,能像跳高运动员一样腾起,还可以像举重运动员一样在两三个人的重压下跳起扣篮。这个单纯没有心机的双鱼座大个子曾经被自己最好的队友出卖过,而现在,“鲨鱼”离开了洛衫矶那个曾经的伤心地游到了迈阿密,在这里,没有人会跟他争老大的位置,他的身边只有谦逊的韦德。在这里,他可以尽情地沐浴迈阿密的阳光

2005年06月02日

    看看你是否有以下缺点:深呼吸之后仍然有一个小肚腩;腿短腰长;臀部过宽;腰粗胃大;胸围平凡。那么你可以选择一款高腰式的裙装来掩盖你的缺点,提升你的自信与时尚造型。 

    腰线的提升,使视觉里的下半身增长了,突出的腹部被隐形了,不管你的臀部多么丰硕,你都可以轻松自如,而胸部则因为胸下围的收紧而显得丰满起来……你的自信,随着腰线提高了至少五公分。 

    高腰连衣裙从轮廓线上来定义应该被称为“帝国式”。当我想从网络上寻找一个关于它的更准确的名词而键入“帝国式”几个字时,我找到的竟然都是闪客帝国、黑客帝国、帝国时代等关于游戏的连接,于是我只好跟着将它们统称为高腰连衣裙,以免“帝国式”的称呼被误会成某种游戏。 

    1804-1815年法兰西拿破伦一世统治的帝政时代又称为帝国时代。这个时代的女装领口大、胸部丰满、在高腰的位置稍收缩,从腰向下摆扩展,后来这个时代的女装就称为帝国式,也就是我们现在看到的高腰连身裙的诞生期。到19世纪初,它发展成整体较简洁的设计,以高腰为显著特征,被称为“帝国型”。再后来还被称为“帝国装”,指在高腰处轻轻系住,以直线达于下摆的帝国风格的服装。今天,我们看到的含有此风格设计的连身裙下摆已经短至膝盖,将雍容的帝国风格变成了活泼甜美的高腰连身裙了。 

    小时候看过一出关于拿破伦和约瑟芬的电影,内容都忘了,惟一记得的就是关于约瑟芬的裙子的一场戏。约瑟芬穿的就是“帝国式”曳地长裙,在宫廷的舞会中遇到了敌视她的拿破伦的妹妹,妹妹故意踩住她的长裙下摆不放,裙摆被撕裂了,于是约瑟芬干脆将裙子从破裂处撕去一圈下摆,无畏地说:“这样更加好看!”然后挽起拿破伦的手腕骄傲地走开……本来左右为难的拿破伦无不自豪地回头对自己的妹妹说:“看,这就是女神的姿态!” 

    一想到约瑟芬那无所畏惧的样子,我就觉得把那个时代的女装称为“帝国式”实不为过,在服装史上还很少有这样恢弘的称谓,仅仅因为一个款式而诞生,想必,它是当之无愧的。想想这个故事,穿高腰连身裙的你是否已经拥有女神般的自信?! 

    选择特殊的材质来穿高腰款式的连身裙,比如金属感觉的质地,再配以平底的靴子,视觉上会很少女,冲淡了许多“帝国式”给人的女性与豪华。 

    用不同材质的拼接,并且把拎包和袜子陪衬得华丽,可以提升高腰裙的正装感,斯文端庄。 

    像这样用丝绒、薄纱、褶皱、层叠做出来的一条高腰裙,虽然没有曳地的长度,却仍然有着宫廷里的华贵……