RTF(rich textformat)富文本格式

 RTF是Rich TextFormat的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。RTF是一种非常流行的文件结构,很多文字编辑器都支持它。一般的格式设置,比如字体和段落设置,页面设置等等信息都可以存在RTF格式中,它能在一定程度上实现word与wps文件之间的互访。
RTF语法
一个RTF文件由未格式化文本、控制字、控制符号和组组成。为了更容易的转换,一个标准的RTF文件应该仅包含7位ASCII码字符。RTF文件没有限制文件的行的最大长度。(再议:maximun line length是指行的字符数还是指文档的行数?)
An RTF file consists of unformatted text, control words, control symbols, and groups. For ease of transport, a standard RTF file can consist of only 7-bit ASCII characters. (Converters that communicate with Microsoft Word for Windows or Microsoft Word for the Macintosh should expect 8-bit characters.) There is no set maximum line length for an RTF file.
控制字是一种特殊的RTF用来标记打印机控制符的格式化命令,也是程序用来管理文档样式的格式化信息。(再议:措辞不好。)一个控制字不能超过32个字符。一个控制字类似以下形式:
/LetterSequence
注意:每个控制字是以反斜杠开始的。
LetterSequence由小写字母字符(a-z)组成。RTF是大小写敏感的。
一个RTF控制字的结束由分隔符标记,以下字符可以作为分隔符:

一个空格。在这种情况下,空格作为关键字的一部分。
一个数字或连字符(-), 意味着它是一个数字参数。这数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从-32767到32767。然而,Word的取值范围可以到达由-31680到31680。Word 允许关键字的小数字参数取值范围在-2,147,483,648到2,147,483,648(特别的,/bin, /revdttm,和一些图像属性)。(再议:a small number of keywords不知所指,应该指这些二进制文件吧。)一个RTF解析器应该能够将一个随意写出的数字字符串转换为一个关键字的合法值。如果一个数值参数紧跟着控制字,这个参数就是控制字的一部分。这时,控制字通过一个空格或非字母数字字符分隔出来,和分隔其他控制字的方式相同。
除了字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。
如果是第一种情况,空格并不会出现在文档中。分隔符之后的所有字符,包括空格,将被写入文档。基于这个理由,你应该尽在需要的情况下使用空格,不要只是将空格用在分隔RTF代码。
RTF 文件内容
一个 RTF 文件符合以下语法:
'{'

'}'
本语法是标准的RTF语法,任何RTF查看器都应该可以正确的解释以此语法格式写出的RTF文件。有必要重申的是:RTF查看器没有必要包含所有的控制字,但它必须能够无害的忽略它不知道(或者未使用)的控制字,并且必须能正确的略过被控制字符号标记的部分。然而,生成RTF的编辑器有可能并没完全符合这个语法规范,同样地,RTF查看器应该有足够能力去处理一些细微变更的控制字。虽然如此,如果一个生成RTF的编辑器符合本规范,那么任何一个正确的RTF查看器都应该能够完美的解释它。


RTF文件结构分析及其应用

RTF是一种非常流行的文件结构,很多文字编辑器都支持它,VB等开发工具甚至还提供了Richtxtbox的控件。编写通用工具的程序员应该考虑在自己的软件中加入读写RTF文件的功能,这样就需要对RTF的结构有充分的了解。而现在最重要的信息发布手段莫过于WWW了,在编辑软件中提供RTF到HTML的转换也是程序员应该考虑的事情。尽管WORD中已经有这个功能,但不能因此就对您的顾客说:“先用我的程序存成RTF,然后再用WORD......”。
下面将对RTF文件结构分析及其应用进行讨论。
一、RTF文件结构分析
  RTF的结构并不复杂,但内容繁多,本文不可能一一说明,只能从总体上讨论一下(如果想阅读详尽的RTF文档,则可在Internet上寻找或与笔者联系。)
每个RTF文件都是一个文本文件,显示时由RTF阅读器格式化。文件开始处是{/rtf,它作为RTF文件的标志是必不可少的,RTF阅读器根据它来判断一个文件是否为RTF格式。然后是文件头和正文,文件头包括字体表、文件表、颜色表等几个数据结构,正文中的字体、表格的风格就是根据文件头的信息来格式化的。每个表用一对大括号括起来,当中包含了很多用字符“/”开始的命令。例如,
某个颜色表如下:
  {/colortbl;/red0/green0/blue0;/red0/green0/blue255;/red0/green255/blue255;/red0/green255/blue0;/red255/green0/blue255;/red255/green0/blue0;/red255/green255/blue0;/red255/green255/blue255;/red0/green0/blue128;/red0/green128/blue128;/red0/green128/blue0;/red128/green0/blue128;/red128/green0/blue0;/red128/green128/blue0;/red128/green128/blue128;/red192/green192/blue192;}
  开始时用/colortbl标明大括号内是颜色表,接着是/red0/green0/blue0,
登记了一种颜色,这种颜色的红绿蓝分量都为0。其它表依此类推。文件头之后是正文,正文由版面格式化命令、文字和各种特殊命令组成。其中只有特殊命令用大括号括起来,而版面格式化命令和文字是“开放式”的,从而把文字和命令分离。文件结束时有一个“}”,和第一个“{”对应。在整个文件中,“}”和“{”必须一一对应。这种格式是RTF阅读器和转换器算法的基础。
  RTF格式还有一个特别之处,就是有些字符在命令中有特殊的含义,所以当它们作为文本出现时需要在它们的前面加一个“/”,例如“/”本身就要表示为“//”。事实上,这种形式在大多数编程语言中是很常见的。
  二、算法分析
  本节介绍的算法虽然是针对RTF的读写,但也是一般文件过滤器通用的方法,适用于各种格式文件之间的转换。具体来说就是把各种文件都转换成一种中间格式,再根据要求进行显示或转换。其中有个原则是一定要遵守的:程序必须能过滤掉不认识的格式。各种文件都有其特殊的格式,在转换过程中不可避免会出现格式损失的现象,在算法中要考虑这种情况。对于RTF这类格式化文本文件来说,最重要的是要正确地显示或转换文件的大小、颜色、字体等风格。
因此,在程序中应该用一个数据结构把这些信息存起来,这个结构就是所谓的中间格式,怎样规定悉听尊便。以下是其流程图:
  三、难点分析
  在开发过程中我们遇到了不少问题,其中有两个问题特别有意思。
  第一个问题是中文的表示方式。在RTF中中文用命令的形式表示:“/'内码”。内码就是汉字机内码。不过,请注意:RTF是文本文件,内码
是用ASCII码来储存的,必须把它转换成数字才能使用。例如,“电子与电脑”
在RTF中的形式是:
  /'b5/'e7/'d7/'d3/'d3/'eb/'b5/'e7/'c4/'d4
  第二个是图片的问题,这也是本文的重点。RTF中图片以两种方式存在:第一种方式是直接嵌入,以{/pict开始;第二种方式是作为OLE对象嵌入,这时以{/object开始。当RTF处理器能直接使用OLE时,RTF文件中提供了OLE的数据;否则,文件中直接提供图片的数据,以{/result开始。在使用中最常见的图片格式是内含DIB BITMAP的元文件(METAFILE),这种格式在SDK中没有说明,而且在RTF中是以压缩形式储存的,所以在转换时有一定困难。
  四.RTF格式的扩展
  最后讨论一下RTF格式的扩展。RTF格式作为一个标准应该是统一的,但在
某种情况下进行扩展是必要的。最明显的例子是微软的WORD,它有自己独有的RTF命令。如果想使自己的软件在技术上占有优势,也可以通过创造新的RTF命令来实现。例如,如果你希望在软件中支持DHTML,则可在RTF中嵌入{/dhtml或{/java之类的命令。由于RTF阅读器有过滤不认识命令的功能,所以这样做不会影响RTF文件的通用性。

<续上>
RTF文件格式学习与应用

一、引言

富文本格式(RTF)规范是为了便于在应用程序之间轻松转储格式化文本和图形的一种编码方法。现在,用户可以利用特定转换软件,在不同系统如MS-DOS、Windows、OS/2、Macintosh和Power Macintosh的应用程序之间转移字处理文档。RTF规范提供一种在不同的输出设备、操作环境和操作系统之间交换文本和图形的一种格式。RTF使用ANSI, PC-8, Macintosh, 或IBM PC字符集控制文档的表示法和格式化,包括屏幕显示和打印。凭借RTF规范,不同的操作系统和不同的软件程序创建的文档能够在这些操作系统和应用程序之间传递。
将一个格式化的文件转换为RTF文件的软件称为RTF书写器。RTF书写器用于分离现有文本中的程序控制信息,并且生成一个包含文本和与之相关的RTF组的新文件。将RTF文件转换成格式化文件的软件则称为RTF阅读器。

二、RTF基本语法
RTF文件由未格式化本文、控制字、控制符和组组成。RTF文件没有限制文件的行的最大长度。
控制字是RTF用来标记打印控制符和管理文档信息的一种特殊格式的命令。一个控制字最长32个字符。控制字的使用格式如下:
/字母序列<分隔符>
注意:每个控制字均以一个反斜杠/开头。字母序列由a~z 的小写字母组成。控制字(或者称为关键字)通常应该不包含任何大写字母。
分隔符标记RTF控制字的结束, 可以是下列各项之一:
·      一个空格,这时空格是控制字的一部份。
·      一个数字或连字符(-), 表示跟随的一个数值参数。该数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从-32767到32767。
·      任何非字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。
控制符由一个反斜线/跟随单个非字母字符组成。例如,/~代表一个不换行空格。控制符不需要分隔符。
组由包括在({})中的文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。每个组包括文本和文本的不同属性。RTF文件也能同时包括字体、格式、屏幕颜色、图形、脚注、注释(注解)、文件头和文件尾、摘要信息、域和书签的组合,以及文档、区段、段落和字符的格式属性。如果包括字体、文件、格式、屏幕颜色、校订标记,以及摘要信息组、文档格式属性,则他们一定要在文件的第一纯文本字符之前,这些组形成RTF的文件头。如果包括字体组,则它应该在格式组之前。如果组未使用,可以省略。
对于RTF文件的详细语法及关键字说明请参阅《Rich Text Format (RTF) Specification v1.7》,这里不作更详细的说明。
三、Hello Word

国际惯例,一个Hello Word!演示例子,内容如下:
{/rtf1/ansi/ansicpg936/deff0/deflang1033/deflangfe2052
{/fonttbl{/f0/fmodern/fprq6/fcharset134 /'cb/'ce/'cc/'e5;}}
{/*/generator Msftedit 5.41.21.2500;}/viewkind4/uc1/pard/lang2052/f0/fs20 Hello World!/par}
该文件分析如下(红色):
1、文件基本属性:
{/rtf1 RTF版本/ansi字符集/ansicpg936简体中文/deff0默认字体0/deflang1033美国英语/deflangfe2052中国汉语
2、字体表:
{/fonttbl{/f0字体0/fmodern/fprq6字体间距为6/fcharset134GB2312国标码 /'cb/'ce/'cc/'e5宋体;}}
3、生成器信息:
{/*/generator Msftedit 5.41.21.2500;}
4、文档属性:
/viewkind4正常视图/uc1单字节/pard默认段落属性/lang2052中国汉语/f0字体0/fs20字体大小20磅
5、正文文本:
Hello World!/par段落标记
}文件结束
注意:在RTF文件中,中文等双字节字符采用其单字节ASCII码序列表示,例如文本“宋体ABC”应该表示为:/'cb/'ce/'cc/'e5ABC,这就是为什么RTF可读性差的原因。
四、文字的更高级表示
掌握了基本文字表述方法后,你一定会试着进一步探索文本更高级的表示方法,如下划线、颜色、粗体、斜体等等,而这些在V1.7规范中都作了详细描述,本文只列出部分常用关键字,以供参考。
l        对于字体表和颜色表的说明:
对于我们在文档中使用的每一个字体和颜色,我们都必须在文档头的字体表和颜色表中预先定义。
字体表定义的例子如下:
{/fonttbl
{/f0/froman/fcharset0/fprq2{/*/panose 02020603050405020304}Times New Roman;}
{/f1/fswiss/fcharset0/fprq2{/*/panose 020b0604020202020204}Arial;}
{/f10/fnil/fcharset2/fprq2{/*/panose 05000000000000000000}Wingdings;}
… …
}
我们在使用字体时,就可以直接指定字体表的一个索引,如:“/f1Happy”表示字体为Arial 的文本Happy。如果我们想加入其他字体,如“华文中宋”,那么只需要在字体表中加入该字体说明,并在需要时引用该字体索引值即可。方法为(华文中宋的ASCII串为“/'bb/'aa/'ce/'c4/'d6/'d0/'cb/'ce”):{f222/fnil/fcharset134/fprq2/'bb/'aa/'ce/'c4/'d6/'d0/'cb/'ce;},然后通过/f222来引用该字体即可。
颜色表定义的例子如下:
{/colortbl;/red0/green0/blue0;/red0/green0/blue255;/red0/green255/blue255;/red0/green255/blue0;/red255/green0/blue255;/red255/green0/blue0;/red255/green255/blue0;/red255/green255/blue255;/red0/green0/blue128;/red0/green128/blue128;/red0/green128/blue0;/red128/green0/blue128;/red128/green0/blue0;/red128/green128/blue0;/red128/green128/blue128;/red192/green192/blue192; … …}
颜色表中每个颜色值采用RGB格式书写,每个颜色用分号格开,注意第一个颜色值/c0为空,表示系统默认颜色(一般为黑色)。依次为:/0、/1、/2、… …。我们在使用颜色时(如字体颜色)就可以指定某一个颜色索引值,如“/cf2Sunday”表示字体颜色为RGB(0,0,255)蓝色的文字Sundy。“/cb6ABC”表示字体背景色为RGB(255,0,0)的文字“ABC”。如果我们需要加入其他颜色值,只需要在颜色表中加入颜色定义,并通过相应的索引值来引用它即可。
l        字符底纹语法如下:
控制字     涵义
==============================================================
/chbrdr    字符边框(每边均有边框)。
/chshdngN    字符阴影。参数N的值文字阴影的百分比。
/chcfpatN   N是背景图案的颜色,指定文档颜色表的一个索引。
/chcbpatN   N是填充色,指定文档颜色表的一个索引。
/chbghoriz   指定水平线文本背景图案。
/chbgvert   指定垂直线文本背景图案。
/chbgfdiag   指定正向对角线文本背景图案()。
/chbgbdiag   指定反向对角线文本背景图案()。
/chbgcross   指定十字线文本背景图案。
/chbgdcross   指定对角十字线文本背景图案。
/chbgdkhoriz   指定粗水平线文本背景图案。
/chbgdkvert   指定粗垂直线文本背景图案。
/chbgdkfdiag   指定粗前斜线文本背景图案()。
/chbgdkbdiag   指定粗后斜线文本背景图案()。
/chbgdkcross   指定粗十字线文本背景图案。
/chbgdkdcross   指定粗对角十字线文本背景图案。
假设我们希望得到背景为水平线、字体为华文中宋(字体索引为222)、颜色为红色(颜色索引为6)的文本“星期天”,则只需输入:/f222/cf6/chbghoriz/'bb/'aa/'ce/'c4/'d6/'d0/'cb/'ce 即可。
l        字符下划线语法如下:

控制字      涵义
=========================================================================
/ul     连续的下划线。/ul0关闭所有下划线。
 
/ulcN     下划线颜色。(注意:大写N表示一个索引数字,下同)
 
/uld     点下划线。
 
/uldash     短划下划线。
 
/uldashd    点划下划线。

/uldashdd    双点划下划线。

/uldb     双下划线。

/ulhwave    加重波浪下划线。

/ulldash     长划下划线。
 
/ulnone     停止所有下划线。
 
/ulth     粗下划线。

/ulthd     粗点下划线。

/ulthdash     粗短划下划线。

/ulthdashd     粗点划下划线。

/ulthdashdd     粗双点划下划线。

/ulthldash     粗长划下划线。

/ululdbwave    双波浪下划线。

/ulw     字下加下划线。

/ulwave     波浪下划线。
 
下划线语法与前面底纹的使用相同。

l        其他文本显示高级属性:
控制字      涵义
====================================================
/outl     边框。/ outl 0关闭之。
 
/scaps     小体大写字母。/ scaps 0关闭之。
 
/shad     阴影。/ shad 0关闭之。
 
/strike     删除线。/strike0关闭之。
 
/striked1    双删除线。/striked0关闭之。
 
/sub     按照字体信息的下标文本和缩小点的尺寸。
 
/super     按照字体信息的上标文本和缩小点的尺寸。

l        对齐方式语法如下:
控制字      涵义
======================================================================
/qc     居中对齐。

/qj     两端对齐。

/ql     左对齐(默认)。

/qr     右对齐。
 
/qd     分散对齐。
 
/qkN     使用Kashida规则调整行百分比(0-低、10-中、20-高)。

/qt     .用于泰文的分散对齐。

l        文本缩进语法如下:
控制字      涵义
========================================================================
/fiN     首行缩进(默认为0)。
 
/cufiN     采用字符单位的百分比的首行缩进值,用以覆盖/fiN的设置,虽然它们可以设为相同值。
 
/liN     左端缩进(默认为0)。

/linN     从左至右段落的左端缩进值;如果在从右至左段落则表示右端缩进值(默认为0)。/linN定义了段前空格数。

/culiN     采用字符单位的百分比的左端缩进值,与/linN一样,它用以覆盖/liN和/linN的设置,虽然它们可以设为相同值。

/riN     右缩进(默认为0)。

/rinN     从左至右段落的右端缩进值;如果在从右至左段落则表示左端缩进值(默认为0)。/rinN定义了段前空格数。

/curiN     采用字符单位的百分比的右端缩进值,与/rinN一样,它用以覆盖/riN和/rinN的设置,虽然它们可以设为相同值。

/adjustright    当文档网格被定义时自动调整右缩进。
l        文本间距语法如下:
/sbN     段后间隔(默认为0)。

/saN     段前间隔(默认为0)。
 
/sbautoN    自动段前间隔:

 0 段前间距取决于/sb。

 1  自动段前间距(忽略/sb)。

 默认为0。
 
/saautoN    自动段后间隔:

 0 段后间距取决于/sa。
 1 自动段后间距(忽略/sa)
 默认为0。

/lisbN   采用字符单位的百分比的段前间隔值,用以覆盖/sbN的设置,虽然它们可以设为相同值。

/lisaN   采用字符单位的百分比的段后间隔值,用以覆盖/saN的设置,虽然它们可以设为相同值。

/slN   行间距。如果没有使用该控制字或者使用/sl0,则行间距将根据行间字符最高值自动取值。若N为一个正值,则该值将仅仅在该值大于行间字符最高值时才使用(否则,使用字符最高值);分N是一个负值,即使在其小于行间字符最高值时,总是使用N的绝对值。
 
/slmultN  多倍行间距。指出当前行间距是单倍行距的倍数。该控制字只能跟在/sl后,联合作用。
 0       “最小”或者是“精确”的行距
 1       多倍行距,相对于“单倍”行距。

/nosnaplinegrid   取消对齐网格线。

五、图片的表示方式

摸清RTF中图片的表示颇费了一番周折,下面的分析希望能够加速你的学习进程。一个RTF图片数据通常直接嵌入文件中,这些图象可以是16进制(默认的)或2进制格式。图象属于目标引用,由/pict 控制字开始。如后面的例子中将描述的,/pict关键字应在/*/shppict引用控制关键字之后。
一个图象的例子如下:
{/*/shppict{/pict
{/*/picprop/shplid1025{/sp{/sn shapeType}{/sv 75}}{/sp{/sn fFlipH}{/sv 0}}{/sp{/sn fFlipV}{/sv 0}}{/sp{/sn pibFlags}{/sv 2}}{/sp{/sn fLine}{/sv 0}}{/sp{/sn fLayoutInCell}{/sv 1}}}
/picscalex100/picscaley100/piccropl0/piccropr0/piccropt0/piccropb0/picw4516/pich4516/picwgoal2560/pichgoal2560/jpegblip/bliptag-728883813
{/*/blipuid d48e1d9b2268ef9f2741709749fb439c}
ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f… …}}
{/nonshppict {/pict /picscalex100/picscaley100/piccropl0/piccropr0/piccropt0/piccropb0/picw4516/pich4516/picwgoal2560/pichgoal2560/wmetafile8/bliptag-728883813/blipupi72
{/*/blipuid d48e1d9b2268ef9f2741709749fb439c}
0100090000034660000000002160000000000400000003010800050000000b0200000000050000000c02ac00ac00030000001e00040000000701040021600000… …}}
其分析如下(红色):
{/*/shppict图片(引用)
{/pict图片开始
绘图对象属性(这个组可以省略):
{/*/picprop表示这里是应用于一个内嵌图象的形状属性/shplid1025标识每个图形的唯一数值
{/sp绘图对象属性定义
{/sn shapeType}{/sv 75}} 图片类型为相框
{/sp{/sn fFlipH}{/sv 0}} 水平翻转:False
{/sp{/sn fFlipV}{/sv 0}} 垂直翻转:False
{/sp{/sn pibFlags}{/sv 2}} 链接图片标志
{/sp{/sn fLine}{/sv 0}}具有线条:False
{/sp{/sn fLayoutInCell}{/sv 1}}允许图形锚点定位在单元格内部:True
}绘图对象属性定义结束
图片属性:
/picscalex100水平缩放比例/picscaley100垂直缩放比例
/piccropl0左端剪切值=0/piccropr0右端剪切值=0/piccropt0上端剪切值=0/piccropb0下端剪切值=0
/picw4516图片的像素宽度/pich4516图片的像素高度/picwgoal2560图象期望宽度/pichgoal2560图象期望高度/jpegblip图片源为一个JPEG文件/bliptag图象ID标识-728883813
{/*/blipuid d48e1d9b2268ef9f2741709749fb439c}
图片16进制数据:
ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f}16进制图片数据结束
}
兼容性wMetaFile文件内容(可用省略):
{/nonshppict只用于兼容,不读取
{/pict图片开始/picscalex100/picscaley100/piccropl0/piccropr0/piccropt0/piccropb0/picw4516/pich4516/picwgoal2560/pichgoal2560/wmetafile8/bliptag-728883813/blipupi72
{/*/blipuid d48e1d9b2268ef9f2741709749fb439c}
下面是MetaFile类型的16进制数据:
0100090000034660000000002160000000000400000003010800050000000b0200000000050000000c02ac00ac00030000001e00040000000701040021600000
}MetaFile类型16进制图片数据结束
}
为了简化分析,我们除去所以可以省略的内容,则一副图片可以这样表示:
{/*/shppict{/pict piccropl0/piccropr0/piccropt0/piccropb0/picw宽度/pich高度/picwgoal显示宽度/pichgoal显示高度/jpegblipJPEG类型/bliptag-728883813ID值(为一个负的长整形值)
下面是该图片的实际16进制数据:
ffd8ffe0001… …}}
六、表格基本表示方法

上面对文本和图片都进行了分析,相信你已经对RTF文件格式有了一定体会,接下来说明RTF文件中表的表示方法。表的定义稍显复杂,不过还是有规律可循的。不存在RTF表组,实际上表由段落属性来描述。一个表表现为多个表行的顺序排列。一个表行是一个由不同单元格组成的段落序列。简言之,表格由行组成,行由单元格组成。不管有多复杂的表格,它都是通过一行接一行的描述来实现的,包括表格的嵌套。表行从控制字/trowd开始,/row结束。包含在一个表行中的每个段落必须指定/intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(/cell控制字)结束,行由行标志(/row控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的来定义。
一个简单表格例子如下:
1,1  1,2  1,3
2,1  2,2  2,3
 RTF内容如下:
/trowd /irow0/irowband0/ts15/trgaph108/trleft-108/trbrdrt
/brdrs/brdrw10 /trbrdrl/brdrs/brdrw10 /trbrdrb/brdrs/brdrw10 /trbrdrr/brdrs/brdrw10 /trbrdrh/brdrs/brdrw10 /trbrdrv/brdrs/brdrw10
/trftsWidth1/trftsWidthB3/trautofit1/trpaddl108/trpaddr108/trpaddfl3/trpaddft3/trpaddfb3/trpaddfr3/tblrsid2113686/tbllkhdrrows/tbllklastrow/tbllkhdrcols/tbllklastcol /clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr
/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2840/clshdrawnil /cellx2732/clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx5573/clvertalt/clbrdrt
/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx8414/pard/plain /qj /li0/ri0/nowidctlpar/intbl/aspalpha/aspnum/faauto/adjustright/rin0/lin0/yts15
/fs21/lang1033/langfe2052/kerning2/loch/af0/hich/af0/dbch/af13/cgrid/langnp1033/langfenp2052 {/insrsid2113686 /hich/af0/dbch/af13/loch/f0 1,1/cell /hich/af0/dbch/af13/loch/f0 1,2/cell /hich/af0/dbch/af13/loch/f0 1,3/cell }/pard/plain
/ql /li0/ri0/widctlpar/intbl/aspalpha/aspnum/faauto/adjustright/rin0/lin0 /fs21/lang1033/langfe2052/kerning2/loch/af0/hich/af0/dbch/af13/cgrid/langnp1033/langfenp2052 {/insrsid2113686 /trowd /irow0/irowband0/ts15/trgaph108/trleft-108/trbrdrt
/brdrs/brdrw10 /trbrdrl/brdrs/brdrw10 /trbrdrb/brdrs/brdrw10 /trbrdrr/brdrs/brdrw10 /trbrdrh/brdrs/brdrw10 /trbrdrv/brdrs/brdrw10
/trftsWidth1/trftsWidthB3/trautofit1/trpaddl108/trpaddr108/trpaddfl3/trpaddft3/trpaddfb3/trpaddfr3/tblrsid2113686/tbllkhdrrows/tbllklastrow/tbllkhdrcols/tbllklastcol /clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr
/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2840/clshdrawnil /cellx2732/clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx5573/clvertalt/clbrdrt
/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx8414/row }/pard/plain /qj /li0/ri0/nowidctlpar/intbl/aspalpha/aspnum/faauto/adjustright/rin0/lin0/yts15
/fs21/lang1033/langfe2052/kerning2/loch/af0/hich/af0/dbch/af13/cgrid/langnp1033/langfenp2052 {/insrsid2113686 /hich/af0/dbch/af13/loch/f0 2,1/cell /hich/af0/dbch/af13/loch/f0 2,2/cell /hich/af0/dbch/af13/loch/f0 2,3/cell }/pard/plain
/ql /li0/ri0/widctlpar/intbl/aspalpha/aspnum/faauto/adjustright/rin0/lin0 /fs21/lang1033/langfe2052/kerning2/loch/af0/hich/af0/dbch/af13/cgrid/langnp1033/langfenp2052 {/insrsid2113686 /trowd /irow1/irowband1/lastrow /ts15/trgaph108/trleft-108/trbrdrt
/brdrs/brdrw10 /trbrdrl/brdrs/brdrw10 /trbrdrb/brdrs/brdrw10 /trbrdrr/brdrs/brdrw10 /trbrdrh/brdrs/brdrw10 /trbrdrv/brdrs/brdrw10
/trftsWidth1/trftsWidthB3/trautofit1/trpaddl108/trpaddr108/trpaddfl3/trpaddft3/trpaddfb3/trpaddfr3/tblrsid2113686/tbllkhdrrows/tbllklastrow/tbllkhdrcols/tbllklastcol /clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr
/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2840/clshdrawnil /cellx2732/clvertalt/clbrdrt/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx5573/clvertalt/clbrdrt
/brdrs/brdrw10 /clbrdrl/brdrs/brdrw10 /clbrdrb/brdrs/brdrw10 /clbrdrr/brdrs/brdrw10 /cltxlrtb/clftsWidth3/clwWidth2841/clshdrawnil /cellx8414/row }
是不是很复杂?不过没关系,我们通过对其进行分段,并加入适当注释,你就会对RTF文件中的表结构一目了然。首先需要声明的是,RTF1.7规范中规定,表行的格式如下:( + /row) | ( + /row) | (+ /row),目前Word2003采用的方式就是第一种,即“定义+内容+重复定义”,如此一来就会有很大的数据冗余,这就是为什么Word2003的一个简单文档都会很大的原因,不过为了兼容性考虑,这样处理也是必要的。其定义也由“行定义+单元格定义”组成,其中单元格定义可用重复。
分析代码如下(红色):


表格行1
/trowd表行1开始
表格属性
/trgaph108表中单元格半间距/trleft-108表的最左边位置
行边框设置
/trbrdrt行的上边框/brdrs单倍厚度/brdrw10线宽
/trbrdrl行的左边框/brdrs单倍厚度/brdrw10线宽
/trbrdrb行的下边框/brdrs单倍厚度/brdrw10线宽
/trbrdrr行的右边框/brdrs单倍厚度/brdrw10线宽
单元格1边框设置
/clbrdrt单元格上边框/brdrw15线宽/brdrs单倍厚度
/clbrdrl单元格左边框/brdrw15线宽/brdrs单倍厚度
/clbrdrb单元格下边框/brdrw15线宽/brdrs单倍厚度
/clbrdrr单元格右边框/brdrw15线宽/brdrs单倍厚度
/cellx2732单元格右边界
单元格2边框设置
/clbrdrt单元格上边框/brdrw15线宽/brdrs单倍厚度
/clbrdrl单元格左边框/brdrw15线宽/brdrs单倍厚度
/clbrdrb单元格下边框/brdrw15线宽/brdrs单倍厚度
/clbrdrr单元格右边框/brdrw15线宽/brdrs单倍厚度
/cellx5573单元格右边界
单元格3边框设置
/clbrdrt单元格上边框/brdrw15线宽/brdrs单倍厚度
/clbrdrl单元格左边框/brdrw15线宽/brdrs单倍厚度
/clbrdrb单元格下边框/brdrw15线宽/brdrs单倍厚度
/clbrdrr单元格右边框/brdrw15线宽/brdrs单倍厚度
/cellx8414单元格右边界
行1数据
/pard重置段落属性/intbl段落是表的一部分/kerning2紧缩字符尺寸/f0字体0/fs21尺寸21
1,1 1,1 /cell表单元格1结束
1,2 1,2 /cell表单元格2结束
1,3 1,3 /cell表单元格3结束
/f1字体1
/row表行1结束
/f0字体0
表格行2
/trowd表行2开始
/trgaph108表中单元格半间距/trleft-108表的最左边位置
行边框设置
/trbrdrt/brdrs/brdrw10
/trbrdrl/brdrs/brdrw10
/trbrdrb/brdrs/brdrw10
/trbrdrr/brdrs/brdrw10
单元格1边框设置
/clbrdrt/brdrw15/brdrs
/clbrdrl/brdrw15/brdrs
/clbrdrb/brdrw15/brdrs
/clbrdrr/brdrw15/brdrs
/cellx2732
单元格2边框设置
/clbrdrt/brdrw15/brdrs
/clbrdrl/brdrw15/brdrs
/clbrdrb/brdrw15/brdrs
/clbrdrr/brdrw15/brdrs
/cellx5573
单元格3边框设置
/clbrdrt/brdrw15/brdrs
/clbrdrl/brdrw15/brdrs
/clbrdrb/brdrw15/brdrs
/clbrdrr/brdrw15/brdrs
/cellx8414
行2数据
/intbl 段落是表的一部分
2,1 2,1/cell表单元格1结束
2,2 2,2/cell表单元格2结束
2,3 2,3/cell表单元格3结束
/f1字体1
/row表行2结束
至此,你应该对RTF表格输出有一定认识了吧。当然在表格中插入图片、嵌入表格等的实现方法同理,嵌入的图片可以等同于一段文本来处理,但是嵌套表格的实现可能比较复杂,因为它涉及段落文本嵌套层次等高级问题,这里不再详述,有兴趣的读者可以参考《Rich Text Format (RTF) Specification v1.7》。

七、小结:RTF文档基本结构
通过对RTF文件的分析,我们得出一个RTF文件基本结构如下:
     RTF文件

 

文件头


     RTF版本/rtf
     字符集
     默认字体区域设置
     默认字体号/deff?
     字体表
     文件表?
     颜色表?
     样式表?
     编目表?
         编目表{ /*/listtable }
         编目替换表{ /*/listoverridetable }
     段落组属性{ /*/pgptbl }
     跟踪修订?
     RSID表?
     生成器信息?
文档区
     文档信息区?
         标题?<br>         主题<subject>?<br>         作者<author>?<br>         经理<manager>?<br>         公司<company>?<br>         最后修改者<operator>?<br>         文档类别<category>?<br>         关键字<keywords>?<br>         注释<comment>?<br>         文档的版本号/version?<br>         Word摘要信息中的注释<doccomm>?<br>         内部版本号/vern?<br>         创建时间<creatim>?<br>         修订时间<revtim>?<br>         最后打印时间<printim>?<br>          备份时间<buptim>?<br>          总编辑时间(单位:分钟)/edmins?<br>         页数/nofpages?<br>         字数/nofwords?<br>         包含空格的总字符数/nofchars?<br>         内部ID号/id?<br>     文档格式属性<docfmt>*<br>         节文本<section>+<br>              节格式属性<secfmt>*<br>              页眉页脚设置<hdrftr>?<br>         段落文本<para>+<br>              文本<textpar>|<br>                   项目符号与编号<pn>?<br>                   段落边框<brdrdef>?<br>                   段落格式属性<parfmt>*<br>                   定位对象与边框<apoctl>*<br>                   制表位设置<tabdef>?<br>                   段落底纹<shading>?<br>                   隐藏与否(/v /spv)?<br>              表格<row><br>                   行开始/trowd<br>                   行定义<tbldef><br>                   单元格<cell>+<br>                       单元格定义+<br>                       单元格内容+<br>                   重复行定义<tbldef><br>                   行结束/row<br>         字符文本<char>+<br>         图片<pict><br>              图片开始{/*/shppict {/pict  }<br>              图片属性<br>              图片数据<br>         对象<obj><br>         绘图对象/shp<br>         脚注/footnote<br>         注释<annot><br>         域<field><br></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1298159654383198208"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(RTF(rich textformat)富文本格式)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950232316408295424.htm" title="9、汇编语言编程入门:从环境搭建到简单程序实现" target="_blank">9、汇编语言编程入门:从环境搭建到简单程序实现</a> <span class="text-muted">神经网络酱</span> <a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80/1.htm">汇编语言</a><a class="tag" taget="_blank" href="/search/MEPIS/1.htm">MEPIS</a><a class="tag" taget="_blank" href="/search/GNU%E5%B7%A5%E5%85%B7%E9%93%BE/1.htm">GNU工具链</a> <div>汇编语言编程入门:从环境搭建到简单程序实现1.数据存储介质问题解决在处理数据存储时,若要使用MEPIS系统,需确保有其可访问的存储介质。目前,MEPIS无法向采用NTFS格式(常用于Windows2000和XP工作站)的硬盘写入数据。不过,若硬盘采用FAT32格式,MEPIS就能进行写入操作。此外,MEPIS还能将文件写入软盘和大多数USB闪存驱动器。若工作站连接到局域网,还可通过FTP协议或挂载</div> </li> <li><a href="/article/1950224616647618560.htm" title="JAVA接口机结构解析" target="_blank">JAVA接口机结构解析</a> <span class="text-muted">秃狼</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/%E5%85%AB%E8%82%A1%E6%96%87/1.htm">八股文</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消</div> </li> <li><a href="/article/1950202938941042688.htm" title="大模型量化终极对决:FP8 vs AWQ INT4,谁才是性能与精度的王者?" target="_blank">大模型量化终极对决:FP8 vs AWQ INT4,谁才是性能与精度的王者?</a> <span class="text-muted">曦紫沐</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%87%8F%E5%8C%96/1.htm">大模型量化</a><a class="tag" taget="_blank" href="/search/FP8/1.htm">FP8</a><a class="tag" taget="_blank" href="/search/AWQ_INT4/1.htm">AWQ_INT4</a> <div>摘要在大模型部署与优化中,量化技术是突破性能瓶颈的关键。FP8量化与AWQINT4量化作为当前主流方案,分别以“高精度”和“极致压缩”为核心优势。本文通过表格对比二者的数据格式、精度损失、硬件依赖及适用场景,助您在不同需求下精准选择最优方案。一、数据格式:浮点与整数的底层差异FP8量化采用浮点数(FP8),包含E4M3(4位阶码+3位尾数)和E5M2(5位阶码+2位尾数)两种格式,保留动态范围;而</div> </li> <li><a href="/article/1950199278483861504.htm" title="Android 媒体播放开发完全指南" target="_blank">Android 媒体播放开发完全指南</a> <span class="text-muted">安卓开发者</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Jetpack/1.htm">Jetpack</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>引言在当今移动应用生态中,媒体播放功能已成为许多应用的核心组成部分。无论是音乐流媒体应用、视频平台、播客客户端还是游戏应用,都需要强大的媒体播放能力。Android平台提供了丰富的API来支持各种媒体播放场景。本文将全面介绍Android媒体播放的开发技术,从基础到高级功能实现。一、Android媒体播放基础1.1支持的媒体格式Android原生支持多种媒体格式:音频:MP3、AAC、FLAC、W</div> </li> <li><a href="/article/1950197285350600704.htm" title="著作权登记申请流程" target="_blank">著作权登记申请流程</a> <span class="text-muted">知识产权宗师猫</span> <div>著作权也就是版权登记一般经过下列程序:一、作品登记应提交的材料:1、作品登记申请书(由作品登记机关提供标准格式);2、作者或其他著作权人的身份证明文件:作者身份证明(复印件,须作者签名);法人或非法人单位的工商注册登记证明或其他相关证明文件(复印件);继承人身份证明文件(复印件);委托作品的委托合同(复印件);合作作者的合作协议或合同及各合作作者的身份证明(复印件)。3、作品著作权归属证明文件:作</div> </li> <li><a href="/article/1950194868756213760.htm" title="程序员必备:10 个提升代码质量的工具" target="_blank">程序员必备:10 个提升代码质量的工具</a> <span class="text-muted">大力出奇迹985</span> <a class="tag" taget="_blank" href="/search/%E5%AE%A0%E7%89%A9/1.htm">宠物</a> <div>在软件开发过程中,代码质量对项目的成功起着决定性作用。高质量的代码不仅易于维护和扩展,还能有效降低成本并提升可靠性。本文精心挑选了10个程序员必备工具,助力提升代码质量。这些工具涵盖代码格式化、静态分析、代码审查、测试、性能优化、安全扫描、版本控制、依赖管理、代码生成以及文档生成等多个关键领域。通过使用它们,开发者能够高效地发现并解决代码中的潜在问题,遵循最佳实践,提升代码的可读性、可维护性与安全</div> </li> <li><a href="/article/1950190073274232832.htm" title="k8s常用基础命令总结" target="_blank">k8s常用基础命令总结</a> <span class="text-muted">Tony666688888</span> <a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a> <div>----------------------k8s常用基础命令---------------------------------获取Pod信息#1.获取k8s的命名空间kubectlgetnamespaces1)获取Pod列表及简要信息:kubectlgetpods2)以YAML格式获取Pod详细信息:kubectlgetpod-oyaml3)获取特定命名空间中的Pod列表kubectlgetpo</div> </li> <li><a href="/article/1950179109170638848.htm" title="SVG 在线编辑器" target="_blank">SVG 在线编辑器</a> <span class="text-muted">lly202406</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>SVG在线编辑器引言随着互联网技术的发展,矢量图形在网页设计和数据可视化中扮演着越来越重要的角色。SVG(可缩放矢量图形)因其文件小、无限缩放不模糊的特性,成为了网页设计中常用的图形格式。SVG在线编辑器的出现,为设计师和开发者提供了极大的便利,使得图形的创建和修改变得更加高效。本文将详细介绍SVG在线编辑器的功能、应用场景以及发展趋势。SVG在线编辑器概述SVG在线编辑器是一种基于网页的图形编辑</div> </li> <li><a href="/article/1950177847956008960.htm" title="【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力" target="_blank">【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力</a> <span class="text-muted">房征劲Kendall</span> <div>AsposeforJava:解锁无水印、无限制的文档处理能力【下载地址】AsposeforJava-去除水印和数量限制AsposeforJava-去除水印和数量限制Aspose是一个著名的文档处理库,专为Java应用程序设计,支持多种文档格式的操作,如Word、Excel、PDF等项目地址:https://gitcode.com/open-source-toolkit/56c82项目介绍在现代企业</div> </li> <li><a href="/article/1950175199089455104.htm" title="PDF转Markdown - Python 实现方案与代码" target="_blank">PDF转Markdown - Python 实现方案与代码</a> <span class="text-muted">Eiceblue</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/PDF/1.htm">PDF</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a> <div>PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac</div> </li> <li><a href="/article/1950164102068367360.htm" title="Makefile if语句用法" target="_blank">Makefile if语句用法</a> <span class="text-muted">java叶新东老师</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/makefile/1.htm">makefile</a> <div>文章目录语法1.BasicExpressions:2.LogicOperators:3.ExistenceChecks4.FileOperations5.Comparisons示例1、判断两个字符串是否相等2、判断文件路径是否目录完语法CMake中的if命令用于有条件地执行一组命令,其格式如下:if()elseif()#optionalblock,canberepeatedelse()#optio</div> </li> <li><a href="/article/1950163472050352128.htm" title="数据库基础概念梳理" target="_blank">数据库基础概念梳理</a> <span class="text-muted">22:30Plane-Moon</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>1.数据存储类型表(Table):存储结构化数据的标准方式,数据以行和列的形式组织,具有固定的格式。非结构化数据(UnstructuredData):如音频、视频、图片、文本文档等,其格式不固定,不易直接用表存储。2.SQL的核心优势SQL尤其擅长处理和操作存储在表中的结构化数据。2.1数据类型约束(DataTypeConstraints):定义列可存储的数据种类。整数类型:TINYINT(1字节</div> </li> <li><a href="/article/1950159312991088640.htm" title="梦幻布丁 启发式合并" target="_blank">梦幻布丁 启发式合并</a> <span class="text-muted"></span> <div>https://www.luogu.com.cn/problem/P3201题目描述n个布丁摆成一行,进行m次操作。每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色。例如,颜色分别为1,2,2,1的四个布丁一共有3段颜色.输入格式第一行是两个整数,分别表示布丁个数n和操作次数m。第二行有n个整数,第i个整数表示第i个布丁的颜色ai。接下来m行,每行描述一次操作。每行首先有一</div> </li> <li><a href="/article/1950141284484182016.htm" title="【测试用例】银行冲正业务" target="_blank">【测试用例】银行冲正业务</a> <span class="text-muted"></span> <div>一、冲正申请阶段冲正原因测试点验证冲正原因的选择是否符合预设的业务规则。验证冲正原因的输入是否支持自由文本,并检查文本长度限制。验证系统是否能够正确保存冲正原因,并在需要时正确显示。冲正金额测试点验证冲正金额的输入格式是否正确(如是否只接受数字、是否有金额上限等)。验证冲正金额与原交易金额的匹配性(如是否一致、是否小于原交易金额等)。验证系统是否能够正确处理冲正金额为0或负数的异常情况。冲正账户信</div> </li> <li><a href="/article/1950140148146565120.htm" title="Java注解笔记" target="_blank">Java注解笔记</a> <span class="text-muted">m0_65470938</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、什么是注解Java注解又称Java标注,是在JDK5时引入的新特性,注解(也被称为元数据)Javaa注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程元素类、方法、成员变量等)进行关联二、注解的应用1.生成文档这是最常见的,也是iava最早提供的注解2.在编译时进行格式检查,如@Overide放在方法前,如果你这个方法并不是看盖了超类Q方法,则编译时就能检查</div> </li> <li><a href="/article/1950139138351099904.htm" title="Java中什么是类加载?类加载的过程?" target="_blank">Java中什么是类加载?类加载的过程?</a> <span class="text-muted"></span> <div>类加载指的是把类加载到JVM中。把二进制流存储到内存中,之后经过一番解析、处理转化成可用的class类二进制流可以来源于class文件,或通过字节码工具生成的字节码或来自于网络。只要符合格式的二进制流,JVM来者不拒。虚拟机遇到⼀条new指令时,⾸先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引⽤,并且检查这个符号引⽤代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执⾏相应的</div> </li> <li><a href="/article/1950131322404007936.htm" title="【计算机网络】细说IP" target="_blank">【计算机网络】细说IP</a> <span class="text-muted">问道飞鱼</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.htm">计算机网络</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.htm">计算机网络</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a> <div>文章目录概述IP地址的组成IP地址的分类IP地址的作用分类一、A类IP地址二、B类IP地址三、C类IP地址四、D类IP地址五、E类IP地址协议报文子网掩码一、定义与功能二、表示方法三、子网掩码与IP地址的关系四、子网掩码的设置与配置五、实例说明IPv6一、定义与背景二、地址格式与特点三、优势与功能四、过渡与部署五、应用与发展IPv6协议报文有了IPv6还需要子网掩码吗概述IP,全称Internet</div> </li> <li><a href="/article/1950118498051092480.htm" title="自定义参数解析器HandlerMethodArgumentResolver,重新定义@ResponseBody的请求方式" target="_blank">自定义参数解析器HandlerMethodArgumentResolver,重新定义@ResponseBody的请求方式</a> <span class="text-muted">chanyi</span> <div>1、解决的问题加了@ResponseBody注解的方法,请求的方式是post的json格式,但如果我们也要通过post的application/x-www-form-urlencoded格式访问此接口。在不改变此接口的情况下。通过修改参数解析器HandlerMethodArgumentResovler来兼容两种请求方法。2、思路根据不同的content-type使用不同参数解析处理器。Conten</div> </li> <li><a href="/article/1950118087764275200.htm" title="【服务器知识】nginx配置ipv6支持" target="_blank">【服务器知识】nginx配置ipv6支持</a> <span class="text-muted">问道飞鱼</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9B%B8%E5%85%B3/1.htm">服务器相关</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/ipv6/1.htm">ipv6</a> <div>nginx配置ipv6支持Nginx全面支持IPv6配置指南一、基础IPv6配置1.启用IPv6监听2.IPv6地址格式说明二、高级IPv6配置1.双栈配置优化2.IPv6访问控制3.IPv6反向代理三、SSL/TLS配置1.IPv6SSL证书配置2.HSTS包含IPv6四、性能优化1.内核参数调优2.Nginx调优参数五、安全加固1.IPv6DDoS防护2.防止地址欺骗六、IPv6测试与诊断1.</div> </li> <li><a href="/article/1950115692665696256.htm" title="Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现不同水果的检测识别(C#代码,UI界面版)" target="_blank">Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现不同水果的检测识别(C#代码,UI界面版)</a> <span class="text-muted"></span> <div>Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现不同水果的检测识别(C#代码,UI界面版))工业相机使用YoloV8模型实现不同水果的检测识别工业相机通过YoloV8模型实现不同水果的检测识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入Yo</div> </li> <li><a href="/article/1950114173308432384.htm" title="2018-03-17早起系列12" target="_blank">2018-03-17早起系列12</a> <span class="text-muted">OUrstory_1996</span> <div>【插播】今日的实践格式【课后实践】这是2018年3月17日崔律“早起”系列加餐课的课后实践。回顾本周的课程内容和实践事项。1.我在本周收获的知识点:早餐是享受生活的关键一笔,在实践中不需要先要求特别完美,一点一点调整慢慢做出美味又好看的早餐2.我受益/最喜欢的点:各种菜谱和漂亮的餐具3.本周内我在实践中的成长:开始把做早餐加进日程,以前都是想一想觉得实现不了就放弃了4.对下周课程(利用早晨时段自我</div> </li> <li><a href="/article/1950102076155555840.htm" title="Centos7防火墙" target="_blank">Centos7防火墙</a> <span class="text-muted">会飞的灰大狼</span> <a class="tag" taget="_blank" href="/search/Centos7/1.htm">Centos7</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Centos7防火墙前言:本来想在系统那里去说防火墙但防火墙要说的要很多使用单独做一章文章去讲防火墙~~‍在CentOS7中,防火墙是保障系统网络安全的核心组件,默认采用firewalld作为防火墙管理工具(替代了CentOS6的iptables服务),底层仍基于iptables内核模块实现规则控制。‍iptablesiptables命令的完整格式较为复杂,其核心结构由命令选项、表(table)、</div> </li> <li><a href="/article/1950097159659515904.htm" title="批改作业小工具(一)-read report" target="_blank">批改作业小工具(一)-read report</a> <span class="text-muted"></span> <div>期末,总是疲于应付各类作业报告批改,搞个小工具,让它帮我一把~~~~(格式)读取报告:importdocxfromdocx.tableimportTabledefextract_experiment_reports(doc_path):"""提取文档中所有实验报告的关键内容"""doc=docx.Document(doc_path)reports=[]#存储所有实验报告fortableindoc.</div> </li> <li><a href="/article/1950090731930578944.htm" title="BEYOND BINARY REWARDS: TRAINING LMS TOREASON ABOUT THEIR UNCERTAINTY" target="_blank">BEYOND BINARY REWARDS: TRAINING LMS TOREASON ABOUT THEIR UNCERTAINTY</a> <span class="text-muted">樱花的浪漫</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8E%E6%99%BA%E8%83%BD%E4%BD%93/1.htm">大模型与智能体</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E6%8A%97%E7%94%9F%E6%88%90%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%8A%A8%E4%BD%9C%E8%AF%86%E5%88%AB/1.htm">对抗生成网络与动作识别</a><a class="tag" taget="_blank" href="/search/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/1.htm">强化学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>https://gist.github.com/josherich/8a30dbf3d6ae0cae1048c3331f38fe80https://gist.github.com/josherich/8a30dbf3d6ae0cae1048c3331f38fe801引言与此担忧一致,研究表明,即使最初校准良好的大型语言模型(LLMs)在RL训练后也会变得过度自信(Lengetal.,2</div> </li> <li><a href="/article/1950087454740508672.htm" title="MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?" target="_blank">MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?</a> <span class="text-muted"></span> <div>以太网帧、IP包及TCP与UDP的报文格式下面用通俗+技术的方式详细解释:1.MAC包头(以太网帧头)中的长度字段名称:EtherType/Length位置:以太网帧头的第13、14字节含义:如果值小于等于1500(0x05DC),表示数据部分的长度(即MAC帧中数据字段的字节数,不包括MAC头和FCS)。如果值大于等于1536(0x0600),表示上层协议类型(如0x0800表示IPv4,0x0</div> </li> <li><a href="/article/1950078384721686528.htm" title="Could not extract GUID in text file UserSettings\Layouts\CurrentMaximizeLayout.dwlt at line 924." target="_blank">Could not extract GUID in text file UserSettings\Layouts\CurrentMaximizeLayout.dwlt at line 924.</a> <span class="text-muted">zhannghong2003</span> <a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E/1.htm">游戏引擎</a> <div>错误提示:无法在文本文件UserSettings\Layouts\CurrentMaximizeLayout.dwlt的第924行提取GUID。UnityEngine.GUIUtility:ProcessEvent(int,intptr,bool&)这个错误发生在Unity无法解析一个损坏或格式错误的布局文件(CurrentMaximizeLayout.dwlt)时。以下是解决方法:解决方案:关闭</div> </li> <li><a href="/article/1950073211790094336.htm" title="批量二维码生成器 v3.2.0:绿色便携,WIFI 码 / Excel 导入够实用" target="_blank">批量二维码生成器 v3.2.0:绿色便携,WIFI 码 / Excel 导入够实用</a> <span class="text-muted">潇洒飘逸的阿楠</span> <a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a> <div>做活动时总被二维码绊住:要给50个参会者做专属码,在线工具怕信息存云端,手动一个个生成,改备注格式能错三次——试了这个v3.2.0绿色版,发现批量处理时藏着几个顺手的细节。下载地址:夸克网盘分享备用地址:迅雷云盘输家里的WIFI名和密码,生成的码客人扫一下就连上,不用再扯着嗓子喊“密码是小写字母加数字”;上周帮咖啡店做,把码印在杯套上,熟客说比问店员省事。把客户姓名和编号填进表格,批量生成后,备注</div> </li> <li><a href="/article/1950071066281963520.htm" title="JavaScript正则表达式去除括号但保留内容与去除括号与内容" target="_blank">JavaScript正则表达式去除括号但保留内容与去除括号与内容</a> <span class="text-muted">Selicens</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>项目上碰到一个需求,是取多个递增文件的文件名,类似于test(1).txt、test(2).txt,但是不需要括号,只要test1、test2这种格式,最开始想到的办法就是js里的replace替换,先上一个比较笨但是也能实现效果的例子letname="test(1).txt"letdata=name.split('.')[0].replace('(','').replace(')','')con</div> </li> <li><a href="/article/1950052911954325504.htm" title="万字解析:从 C 语言到初阶数据结构" target="_blank">万字解析:从 C 语言到初阶数据结构</a> <span class="text-muted">Aurora-silas</span> <a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录万字解析:从C语言到初阶数据结构前言第一章:C语言初识与环境搭建C语言的历史与影响开发工具介绍第一个程序HelloWorld第二章:变量、数据类型与运算符基本数据类型常量与变量命名规范运算符与表达式趣味小练习:BMI计算器第三章:输入输出与格式化printf输出格式详解scanf输入用法与常见问题小项目:自我介绍程序第四章:流程控制if/else条件判断switch语句循环结构小练习:乘法口诀</div> </li> <li><a href="/article/1950050264991985664.htm" title="Langchain学习笔记(十):文档加载与处理详解" target="_blank">Langchain学习笔记(十):文档加载与处理详解</a> <span class="text-muted"></span> <div>注:本文是Langchain框架的学习笔记;不是教程!不是教程!内容可能有所疏漏,欢迎交流指正。后续将持续更新学习笔记,分享我的学习心得和实践经验。前言在构建基于大语言模型的应用时,文档处理是一个至关重要的环节。无论是构建RAG(检索增强生成)系统,还是进行知识库问答,我们都需要将各种格式的文档转换为模型可以理解和处理的形式。Langchain提供了强大的文档加载和处理功能,支持多种文件格式,并提</div> </li> <li><a href="/article/106.htm" title="书其实只有三类" target="_blank">书其实只有三类</a> <span class="text-muted">西蜀石兰</span> <a class="tag" taget="_blank" href="/search/%E7%B1%BB/1.htm">类</a> <div>一个人一辈子其实只读三种书,知识类、技能类、修心类。 知识类的书可以让我们活得更明白。类似十万个为什么这种书籍,我一直不太乐意去读,因为单纯的知识是没法做事的,就像知道地球转速是多少一样(我肯定不知道),这种所谓的知识,除非用到,普通人掌握了完全是一种负担,维基百科能找到的东西,为什么去记忆? 知识类的书,每个方面都涉及些,让自己显得不那么没文化,仅此而已。社会认为的学识渊博,肯定不是站在</div> </li> <li><a href="/article/233.htm" title="《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他" target="_blank">《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/tcp/1.htm">tcp</a> <div>《TCP/IP 详解,卷1:协议》是经典,但不适合初学者。它更像是一本字典,适合学过网络的人温习和查阅一些记不清的概念。 这本书,我看的版本是机械工业出版社、范建华等译的。这本书在我看来,翻译得一般,甚至有明显的错误。如果英文熟练,看原版更好: http://pcvr.nl/tcpip/ 下面是我的一些笔记,包括我看书时有疑问的地方,也有对该书的吐槽,有不对的地方请指正: 1.</div> </li> <li><a href="/article/360.htm" title="Linux—— 静态IP跟动态IP设置" target="_blank">Linux—— 静态IP跟动态IP设置</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/IP/1.htm">IP</a> <div>一.在终端输入 vi /etc/sysconfig/network-scripts/ifcfg-eth0 静态ip模板如下: DEVICE="eth0" #网卡名称 BOOTPROTO="static" #静态IP(必须) HWADDR="00:0C:29:B5:65:CA" #网卡mac地址 IPV6INIT=&q</div> </li> <li><a href="/article/487.htm" title="Informatica update strategy transformation" target="_blank">Informatica update strategy transformation</a> <span class="text-muted">18289753290</span> <div>更新策略组件: 标记你的数据进入target里面做什么操作,一般会和lookup配合使用,有时候用0,1,1代表 forward  rejected rows被选中,rejected row是输出在错误文件里,不想看到reject输出,将错误输出到文件,因为有时候数据库原因导致某些column不能update,reject就会output到错误文件里面供查看,在workflow的</div> </li> <li><a href="/article/614.htm" title="使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态" target="_blank">使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/request/1.htm">request</a> <div>现象就是: 程序运行一段时间,可能是几十分钟或者几个小时,然后后台日志里面就不出现下载页面的信息,一直显示上一分钟抓取了0个网页的信息。 刚开始已经猜到是某些下载线程没有正常执行回调方法引起程序一直以为线程还未下载完成,但是水平有限研究源码未果。 经过不停的google终于发现一个有价值的信息,是给twisted提出的一个bugfix 连接地址如下http://twistedmatrix.</div> </li> <li><a href="/article/741.htm" title="利用预测分析技术来进行辅助医疗" target="_blank">利用预测分析技术来进行辅助医疗</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BB%E7%96%97/1.htm">医疗</a> <div>2014年,克利夫兰诊所(Cleveland Clinic)想要更有效地控制其手术中心做膝关节置换手术的费用。整个系统每年大约进行2600例此类手术,所以,即使降低很少一部分成本,都可以为诊 所和病人节约大量的资金。为了找到适合的解决方案,供应商将视野投向了预测分析技术和工具,但其分析团队还必须花时间向医生解释基于数据的治疗方案意味着 什么。  克利夫兰诊所负责企业信息管理和分析的医疗</div> </li> <li><a href="/article/868.htm" title="java 线程(一):基础篇" target="_blank">java 线程(一):基础篇</a> <span class="text-muted">DavidIsOK</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a> <div>                                                        &nbs</div> </li> <li><a href="/article/995.htm" title="Tomcat服务器框架之Servlet开发分析" target="_blank">Tomcat服务器框架之Servlet开发分析</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>最近使用Tomcat做web服务器,使用Servlet技术做开发时,对Tomcat的框架的简易分析: 疑问: 为什么我们在继承HttpServlet类之后,覆盖doGet(HttpServletRequest req, HttpServetResponse rep)方法后,该方法会自动被Tomcat服务器调用,doGet方法的参数有谁传递过来?怎样传递? 分析之我见: doGet方法的</div> </li> <li><a href="/article/1122.htm" title="揭秘玖富的粉丝营销之谜 与小米粉丝社区类似" target="_blank">揭秘玖富的粉丝营销之谜 与小米粉丝社区类似</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E6%8F%AD%E7%A7%98%E7%8E%96%E5%AF%8C%E7%9A%84%E7%B2%89%E4%B8%9D%E8%90%A5%E9%94%80%E4%B9%8B%E8%B0%9C/1.htm">揭秘玖富的粉丝营销之谜</a> <div>玖富旗下悟空理财凭借着一个微信公众号上线当天成交量即破百万,第七天成交量单日破了1000万;第23天时,累计成交量超1个亿……至今成立不到10个月,粉丝已经超过500万,月交易额突破10亿,而玖富平台目前的总用户数也已经超过了1800万,位居P2P平台第一位。很多互联网金融创业者慕名前来学习效仿,但是却鲜有成功者,玖富的粉丝营销对外至今仍然是个谜。     近日,一直坚持微信粉丝营销</div> </li> <li><a href="/article/1249.htm" title="Java web的会话跟踪技术" target="_blank">Java web的会话跟踪技术</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/url%E4%BC%9A%E8%AF%9D/1.htm">url会话</a><a class="tag" taget="_blank" href="/search/Cookie%E4%BC%9A%E8%AF%9D/1.htm">Cookie会话</a><a class="tag" taget="_blank" href="/search/Seession%E4%BC%9A%E8%AF%9D/1.htm">Seession会话</a><a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a><a class="tag" taget="_blank" href="/search/%E9%9A%90%E8%97%8F%E5%9F%9F%E4%BC%9A%E8%AF%9D/1.htm">隐藏域会话</a> <div>会话跟踪主要是用在用户页面点击不同的页面时,需要用到的技术点   会话:多次请求与响应的过程     1,url地址传递参数,实现页面跟踪技术          格式:传一个参数的 url?名=值     传两个参数的 url?名=值 &名=值   关键代码</div> </li> <li><a href="/article/1376.htm" title="web.xml之Servlet配置" target="_blank">web.xml之Servlet配置</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/Servlet%E9%85%8D%E7%BD%AE/1.htm">Servlet配置</a> <div>定义: <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>com.myapp.controller.MyFirstServlet</servlet-class> <init-param> <param-name></div> </li> <li><a href="/article/1503.htm" title="利用svnsync实现SVN同步备份" target="_blank">利用svnsync实现SVN同步备份</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5/1.htm">同步</a><a class="tag" taget="_blank" href="/search/E000022/1.htm">E000022</a><a class="tag" taget="_blank" href="/search/svnsync/1.htm">svnsync</a><a class="tag" taget="_blank" href="/search/%E9%95%9C%E5%83%8F/1.htm">镜像</a> <div>1. 在备份SVN服务器上建立版本库    svnadmin create test 2. 创建pre-revprop-change文件     cd test/hooks/     cp pre-revprop-change.tmpl pre-revprop-change 3. 修改pre-revprop-</div> </li> <li><a href="/article/1630.htm" title="【分布式数据一致性三】MongoDB读写一致性" target="_blank">【分布式数据一致性三】MongoDB读写一致性</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>本系列文章结合MongoDB,探讨分布式数据库的数据一致性,这个系列文章包括: 数据一致性概述与CAP 最终一致性(Eventually Consistency) 网络分裂(Network Partition)问题 多数据中心(Multi Data Center) 多个写者(Multi Writer)最终一致性 一致性图表(Consistency Chart) 数据</div> </li> <li><a href="/article/1757.htm" title="Anychart图表组件-Flash图转IMG普通图的方法" target="_blank">Anychart图表组件-Flash图转IMG普通图的方法</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/Flash/1.htm">Flash</a> <div>问题背景:项目使用的是Anychart图表组件,渲染出来的图是Flash的,往往一个页面有时候会有多个flash图,而需求是让我们做一个打印预览和打印功能,让多个Flash图在一个页面上打印出来。   那么我们打印预览的思路是获取页面的body元素,然后在打印预览界面通过$("body").append(html)的形式显示预览效果,结果让人大跌眼镜:Flash是</div> </li> <li><a href="/article/1884.htm" title="Window 80端口被占用 WHY?" target="_blank">Window 80端口被占用 WHY?</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/1.htm">端口占用</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>平时在启动一些可能使用80端口软件的时候,会提示80端口已经被其他软件占用,那一般又会有那些软件占用这些端口呢?    下面坐下总结:         1、web服务器是最经常见的占用80端口的,例如:tomcat , apache  , IIS , Php等等;         2</div> </li> <li><a href="/article/2011.htm" title="编程之美-数组的最大值和最小值-分治法(两种形式)" target="_blank">编程之美-数组的最大值和最小值-分治法(两种形式)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.Arrays; public class MinMaxInArray { /** * 编程之美 数组的最大值和最小值 分治法 * 两种形式 */ public static void main(String[] args) { int[] t={11,23,34,4,6,7,8,1,2,23}; int[] </div> </li> <li><a href="/article/2138.htm" title="Perl正则表达式" target="_blank">Perl正则表达式</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/perl/1.htm">perl</a> <div>首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m) 替换:s/<pattern>;/<replacement>;/ 转化:tr/<pattern>;/<replacemnt>;</div> </li> <li><a href="/article/2265.htm" title="[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?" target="_blank">[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?</a> <span class="text-muted">comsci</span> <div>       举个例子: 地球,地球上由200多个国家选举出一个代表地球联合体的议会,那么现在地球联合体遇到一个问题,地球这颗星球上面的矿产资源快要采掘完了....那么地球议会全体投票,一致通过一项带有法律性质的议案,既批准地球上的国家用各种技术手段在地球以外开采矿产资源和其它资源........    &</div> </li> <li><a href="/article/2392.htm" title="Oracle Profile 使用详解" target="_blank">Oracle Profile 使用详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/profile/1.htm">profile</a><a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90%E9%99%90%E5%88%B6/1.htm">资源限制</a> <div>Oracle Profile 使用详解 转 一、目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。 二、条件: 创建profile必须要有CREATE PROFIL</div> </li> <li><a href="/article/2519.htm" title="How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis" target="_blank">How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/Lucene/1.htm">Lucene</a> <div>This article is from an interview with Zuhaib Siddique, a production engineer at HipChat, makers of group chat and IM for teams. HipChat started in an unusual space, one you might not </div> </li> <li><a href="/article/2646.htm" title="循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序" target="_blank">循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div># include <stdio.h> int main(void) { int n; int i; int f1, f2, f3; f1 = 1; f2 = 1; printf("请输入您需要求的想的序列:"); scanf("%d", &n); for (i=3; i<n; i</div> </li> <li><a href="/article/2773.htm" title="macbook的lamp环境" target="_blank">macbook的lamp环境</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/lamp/1.htm">lamp</a> <div>  sudo vim /etc/apache2/httpd.conf   /Library/WebServer/Documents 是默认的网站根目录   重启Mac上的Apache服务   这个命令很早以前就查过了,但是每次使用的时候还是要在网上查: 停止服务:sudo /usr/sbin/apachectl stop 开启服务:s</div> </li> <li><a href="/article/2900.htm" title="java ArrayList源码 下" target="_blank">java ArrayList源码 下</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/ArrayList%E6%BA%90%E7%A0%81/1.htm">ArrayList源码</a> <div>版本 jdk-7u71-windows-x64   JavaSE7 ArrayList源码上:http://flyouwith.iteye.com/blog/2166890     /** * 从这个列表中移除所有c中包含元素 */ public boolean removeAll(Collection<?> c) {</div> </li> <li><a href="/article/3027.htm" title="Spring Security(08)——intercept-url配置" target="_blank">Spring Security(08)——intercept-url配置</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/intercept-url/1.htm">intercept-url</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90/1.htm">访问权限</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE/1.htm">访问协议</a><a class="tag" taget="_blank" href="/search/%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95/1.htm">请求方法</a> <div>intercept-url配置 目录 1.1     指定拦截的url 1.2     指定访问权限 1.3     指定访问协议 1.4     指定请求方法   1.1   &n</div> </li> <li><a href="/article/3154.htm" title="Linux环境下的oracle安装" target="_blank">Linux环境下的oracle安装</a> <span class="text-muted">jayung</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>linux系统下的oracle安装 本文档是Linux(redhat6.x、centos6.x、redhat7.x) 64位操作系统安装Oracle 11g(Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production),本文基于各种网络资料精心整理而成,共享给有需要的朋友。如有问题可联系:QQ:52-7</div> </li> <li><a href="/article/3281.htm" title="hotspot虚拟机" target="_blank">hotspot虚拟机</a> <span class="text-muted">leichenlei</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a> <div>JVM参数  http://docs.oracle.com/javase/6/docs/technotes/guides/vm/index.html   JVM工具 http://docs.oracle.com/javase/6/docs/technotes/tools/index.html   JVM垃圾回收 http://www.oracle.com</div> </li> <li><a href="/article/3408.htm" title="读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”" target="_blank">读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”</a> <span class="text-muted">noaighost</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活” 眼里的Node.JS 初初接触node是一年前的事,那时候年少不更事。还在纠结什么语言可以编写出牛逼的程序,想必每个码农都会经历这个月经性的问题:微信用什么语言写的?facebook为什么推荐系统这么智能,用什么语言写的?dota2的外挂这么牛逼,用什么语言写的?……用什么语言写这句话,困扰人也是阻碍</div> </li> <li><a href="/article/3535.htm" title="快速开发Android应用" target="_blank">快速开发Android应用</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>Android应用开发过程中,经常会遇到很多常见的类似问题,解决这些问题需要花时间,其实很多问题已经有了成熟的解决方案,比如很多第三方的开源lib,参考 Android Libraries 和 Android UI/UX Libraries。 编码越少,Bug越少,效率自然会高。 但可能由于 根本没听说过、听说过但没用过、特殊原因不能用、自己已经有了解决方案等等原因,这些成熟的解决</div> </li> <li><a href="/article/3662.htm" title="理解Java中的弱引用" target="_blank">理解Java中的弱引用</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div> 不久之前,我 面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。   然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了</div> </li> <li><a href="/article/3789.htm" title="关于<c:out value=""/>标签输出html标签" target="_blank">关于<c:out value=""/>标签输出html标签</a> <span class="text-muted">xshdch</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>http://back-888888.iteye.com/blog/1181202 关于<c:out value=""/>标签的使用,其中有一个属性是escapeXml默认是true(将html标签当做转移字符,直接显示不在浏览器上面进行解析),当设置escapeXml属性值为false的时候就是不过滤xml,这样就能在浏览器上解析html标签, &nb</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>