??xml version="1.0" encoding="utf-8" standalone="yes"?>在线免费av观看,成人免费高清视频,1区2区3区在线观看http://www.aygfsteel.com/hilor/category/26589.html我的学习案?/description>zh-cnSat, 29 Mar 2008 08:27:58 GMTSat, 29 Mar 2008 08:27:58 GMT60JAVA中获取系l\?/title><link>http://www.aygfsteel.com/hilor/articles/189347.html</link><dc:creator>hilor</dc:creator><author>hilor</author><pubDate>Fri, 28 Mar 2008 12:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/hilor/articles/189347.html</guid><wfw:comment>http://www.aygfsteel.com/hilor/comments/189347.html</wfw:comment><comments>http://www.aygfsteel.com/hilor/articles/189347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hilor/comments/commentRss/189347.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hilor/services/trackbacks/189347.html</trackback:ping><description><![CDATA[<span id="ArticleContent1_ArticleContent1_lblContent"><span id="wmqeeuq" class="postbody"><font size="2">在Application? <br /> System.getProperty("user.dir") <br /> <br /> 在Servlet? <br /> ServletContext servletContext = config.getServletContext(); <br /> String rootPath = servletContext.getRealPath("/"); <br /> <br /> 在jsp? <br /> application.getRealPath("") </font></span></span> <img src ="http://www.aygfsteel.com/hilor/aggbug/189347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hilor/" target="_blank">hilor</a> 2008-03-28 20:36 <a href="http://www.aygfsteel.com/hilor/articles/189347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Java~码问题详解http://www.aygfsteel.com/hilor/articles/180895.htmlhilorhilorWed, 20 Feb 2008 08:32:00 GMThttp://www.aygfsteel.com/hilor/articles/180895.htmlhttp://www.aygfsteel.com/hilor/comments/180895.htmlhttp://www.aygfsteel.com/hilor/articles/180895.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/180895.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/180895.html引用Q?a >http://blog.csdn.net/Mr_IT/archive/2006/10/18/1339656.aspx

>汉字~码的相兌?br />   汉字是双字节的,要占用两个BYTE的位|(?6位)Q分别称为高位和低位?br /> 中国规定的汉字编码ؓGB2312Q这是强制性的Q目前几乎所有的能处理中文的应用E序都支持GB2312。GB2312包括了一二汉字?区符P高位?xa1?xfeQ低位也是从0xa1?xfeQ其中,汉字的编码范围ؓ0xb0a1?xf7fe?br /> 另外有一U编码,叫做GBKQ但q是一份规范,不是强制的。GBK提供?0902个汉字,它兼容GB2312Q编码范围ؓ0x8140?xfefe。GBK中的所有字W都可以一一映射到Unicode 2.0?br /> 中国q颁布了另一U标准:GB18030-2000QGBK2KQ。它收录了藏、蒙{少数民族的字型Q从Ҏ上解决了字位不的问题。注意:它不再是定长的。其二字节部份与GBK兼容Q四字节部分是扩充的字符、字形。它的首字节和第三字节从0x81?xfeQ二字节和第四字节从0x30?x39?/p>

2>不同语言直接的{?br />   异种语言之间的{换是通过Unicode来完成的。假设有两种不同的语aA和BQ{换的步骤为:先把A转化为UnicodeQ再把Unicode转化为B?br />   举例说明。有GB2312中有一个汉?#8220;?#8221;Q其~码?#8220;C0EE”Q欲转化为ISO8859-1~码。步骤ؓQ先?#8220;?#8221;字{化ؓUnicodeQ得?“674E”Q再?#8220;674E”转化为ISO8859-1字符。当Ӟq个映射不会成功Q因为ISO8859-1中根本就没有?#8220;674E”对应的字W。当映射不成功时Q问题就发生了!当从某语a向Unicode转化Ӟ如果在某语言中没有该字符Q得到的是Unicode的代?#8220;\uffffd”Q?#8220;\ u”表示是Unicode~码Q)。而从Unicode向某语言转化Ӟ如果某语a没有对应的字W,则得到的?#8220;0x3f”Q?#8220;?”Q。这是“?”的由来。例如:把字W流buf =“0x80 0x40 0xb0 0xa1”q行new String(buf, "gb2312")操作Q得到的l果?#8220;\ufffd\u554a”Q再println出来Q得到的l果是“??#8221;Q因?#8220;0x80 0x40”是GBK中的字符Q在GB2312中没有。再如,把字W串String="\u00d6\u00ec\u00e9\u0046\u00bb\ u00f9"q行new String (buf.getBytes("GBK"))操作Q得到的l果?#8220;3fa8aca8a6463fa8b4”Q其中,“\u00d6”?#8220;GBK”中没有对应的字符Q得?#8220;3f”Q?#8220;\u00ec”对应着“a8ac”Q?#8220;\u00e9”对应着“a8a6”Q?#8220;0046”对应着“46”Q因是ASCII字符Q,“\u00bb”没找刎ͼ得到“3f”Q最后,“\u00f9”对应着“a8b4”。把q个字符串println一下,得到的结果是“?ìéF? ù”。看到没Q这里ƈ不全是问P因ؓGBK与Unicode映射的内容中除了汉字外还有字W,本例是最好的明证?/p>

3>Unicode格式
  Unicode默认为UTF-16格式?br />   UTF-8是Unicode压羃版本Q对于大多数常用字符?ASCII?~127字符)它只使用单字节,而对其它常用字符(特别是朝鲜和汉语会意文字)Q它使用Q字节。如果写的主要是pQ那么UTF-8可减文件大一半左叟?br />   UTF-8是?位ؓ单元对UCSq行~码Q以字节为编码单元,没有字节序的问题。UTF-16以两个字节ؓ~码单元Q在解释一个UTF-16文本前,首先要弄清楚每个~码单元的字节序。例??的Unicode~码?94EQ??的Unicode~码?E59。如果我们收到UTF-16字节?"594E"Q那么这?#8220;?#8221;q是"?QUnicode规范中推荐的标记字节序的方法是BOM(即Byte Order Mark)。如果接收者收到FEFFQ就表明q个字节是Big-Endian的;如果收到FFFEQ就表明q个字节是Little-Endian的?/p>

3>UTF格式
  UTFQ是Unicode Text Format的羃写,意ؓUnicode文本格式。对于UTFQ是q样定义的:
  ?如果Unicode?6位字W的?位是0Q则用一个字节表C,q个字节的首位是“0”Q剩下的7位与原字W中的后7位相同,?#8220;\u0034” Q?000 0000 0011 0100Q,?#8220;34” (0011 0100)表示Q(与源Unicode字符是相同的Q;
  >7位的Unicode: 0 _ _ _ _ _ _ _
  ?如果Unicode?6位字W的?位是0Q则?个字节表C,首字节是“110”开_后面?位与源字W中除去?个零后的最?位相同;W二个字节以“10”开_后面?位与源字W中的低6位相同。如“\u025d”Q?000 0010 0101 1101Q,转化后ؓ“c99d”Q?100 1001 1001 1101Q;
  >11位的Unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _
  ?如果不符合上qC个规则,则用三个字节表示。第一个字节以“1110”开_后四位ؓ源字W的高四位;W二个字节以“10”开_后六位ؓ源字W中间的六位Q第三个字节?#8220;10”开_后六位ؓ源字W的低六位;?#8220;\u9da7”Q?001 1101 1010 0111Q,转化?#8220;e9b6a7”Q?110 1001 1011 0110 1010 0111Q;
  >16位的Unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  >21位的Unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  可以q么描述JAVAE序中Unicode与UTF的关p,虽然不绝对:字符串在内存中运行时Q表CؓUnicode代码Q而当要保存到文g或其它介质中LQ用的是UTF。这个{化过E是由writeUTF和readUTF来完成的?/p>

4>JavaE序中的~码格式内幕
  input(charsetA)-Qprocess(Unicode)-Qoutput(charsetB)
  卌入、处理和输出要经q?#8220;从charsetA到unicode再到charsetB”的{化?/p>

  SourceFile(jsp,java)-Qclass-Qoutput
  输入的是jsp和java源文Ӟ在处理过E中Q以Class文g体,然后输出?/p>

 ?JSP从源文g到Class的过E?br />   在本节中Q将阐述JSP文g的解释和~译q程Qƈ跟踪其中的中文变化?br />   1、JSP/Servlet引擎提供的JSP转换工具QjspcQ搜索JSP文g中用Q?@ page contentType ="text/html; charset=QJsp-charsetQ?%Q中指定的charset。如果在JSP文g中未指定QJsp-charsetQ,则取JVM中的默认讄file.encodingQ一般情况下Q这个值是ISO8859-1Q?br />   2、jspc用相当于“javac –encoding QJsp-charsetQ?#8221;的命令解释JSP文g中出现的所有字W,包括中文字符和ASCII字符Q然后把q些字符转换成Unicode字符Q再转化?UTF格式Q存为JAVA文g。ASCII码字W{化ؓUnicode字符时只是简单地在前面加“00”Q如“A”Q{化ؓ“\u0041”Q不需要理由,Unicode的码表就是这么编的)。然后,l过到UTF的{换,又变?#8220;41”了!q也是可以使用普通文本编辑器查看由JSP生成的JAVA文g的原因;
  3、引擎用相当?#8220;javac –encoding UNICODE”的命令,把JAVA文g~译成CLASS文gQ?br />   先看一下这些过E中中文字符的{换情c有如下源代码:
Q?@ page contentType="text/html; charset=gb2312"%Q?br /> QhtmlQ<bodyQ?br /> Q?
 String a="中文";
 out.println(a);
%Q?br /> Q?bodyQ</htmlQ?
  两个字的GB2312~码?#8220;D6 D0 CE C4”。经查表Q?#8220;中文”两字的Unicode~码?#8220;\u4E2D\u6587”Q用 UTF表示是“E4 B8 AD E6 96 87”。此JSP文g生成的JAVA文g中的“中文”两个字被“E4 B8 AD E6 96 87”替代了,再查看由JAVA文g~译生成的CLASS文gQ发现结果与JAVA文g中的完全一栗?br />  
  再看JSP中指定的CharSet为ISO-8859-1的情c?br /> Q?@ page contentType="text/html; charset=ISO-8859-1"%Q?br /> QhtmlQ<bodyQ?br /> Q?
 String a="中文";
 out.println(a);
%Q?br /> Q?bodyQ</htmlQ?
  先推一下生成的JAVA文g和CLASS文g的过E:jspc用ISO-8859-1来解?#8220;中文”Qƈ把它映射到Unicode。由于ISO- 8859-1?位的Q其映射规则是在每个字节前?#8220;00”Q所以,映射后的Unicode~码应ؓ“\u00D6\u00D0\u00CE\ u00C4”Q{化成UTF后应该是“C3 96 C3 90 C3 8E C3 84”。最后,打开文g看一下,JAVA文g和CLASS文g中,“中文”果然都表CZؓ“C3 96 C3 90 C3 8E C3 84”?br />   如果上述代码中不指定QJsp-charsetQ,xW一行写?#8220;Q?@ page contentType="text/html" %Q?#8221;QJSPC会用file.encoding的设|来解释JSP文g。在RedHat 6.2上,其处理结果与指定为ISO-8859-1是完全相同的?br />  
  到现在ؓ止,已经解释了从JSP文g到CLASS文g的{变过E中中文字符的映过E。一句话Q从“JspCharSet到Unicode再到UTF”?/p>

  ?Servlet从源文g到Class的过E?br />   本节讨论Servlet的编译过Eƈ跟踪其中的中文变化?br />   ?#8220;javac”~译Servlet源文件。javac可以?#8220;-encoding QCompile-charsetQ?#8221;参数Q意思是“用< Compile-charset Q中指定的编码来解释Serlvet源文?#8221;?br />   源文件在~译Ӟ用<Compile-charsetQ来解释所有字W,包括中文字符和ASCII字符。然后把字符帔R转变成Unicode字符Q最后,把Unicode转变成UTF?br />   在Servlet中,q有一个地方设|输出流的CharSet。通常在输出结果前Q调用HttpServletResponse?setContentTypeҎ来达C在JSP中设|<Jsp-charsetQ一L效果Q称之ؓQServlet-charsetQ?br />   注意Q文中一共提C三个变量Q<Jsp-charsetQ、<Compile-charsetQ和QServlet-charsetQ。其中,JSP文g只与QJsp-charsetQ有养I而<Compile-charsetQ和QServlet-charsetQ只与Servlet有关?/p>

import javax.servlet.*;
import javax.servlet.http.*;
class testServlet extends HttpServlet
{
 public void doGet(HttpServletRequest req,HttpServletResponse res)
 throws ServletException,java.io.IOException
 {
  res.setContentType("text/html; charset=GB2312");
  java.io.PrintWriter out=res.getWriter();
  out.println("QhtmlQ?);
  out.println("#中文#");
  out.println("Q?htmlQ?);
 }
}

  开始编译。下表是QCompile-charsetQ不同时QCLASS文g?#8220;中文”两字的十六进制码。在~译q程中,QServlet- charsetQ不起Q何作用。<Servlet-charsetQ只对CLASS文g的输Z生媄响,实际上是QServlet-charsetQ和QCompile-charsetQ一P辑ֈ与JSP文g中的QJsp-charsetQ相同的效果Q因为<Jsp-charsetQ对~译?CLASS文g的输出都会生媄响?#8220;中文”两个字的GB2312~码?#8220;D6 D0 CE C4”

Compile-charset   Class文g?nbsp;                     {效的Unicode?
GB2312            E4 B8 AD E6 96 87(UTF)          \u4E2D\u6587 (在Unicode中=“中文”)
ISO-8859-1        C3 96 C3 90 C3 8E C3 84 (UTF)   \u00D6 \u00D0 \u00CE \u00C4 (在D6 D0 CE C4前面各加了一?0)
Q默认)           同ISO-8859-1                     同ISO-8859-1

  普通JavaE序的编译过E与Servlet完全一栗?br />   接下来看看CLASS又是怎样输出中文的呢Q?br />   上文说过Q字W串在内存中表现为Unicode~码。至于这UUnicode~码表示了什么,那要看它是从哪种字符集映过来的Q也是说要看它的祖先。看看上面的例子Q如果给一串Unicode~码“00D6 00D0 00CE 00C4”Q如果不作{换,直接用Unicode码表来对照它Ӟ是四个字W(而且是特D字W)Q假如把它与“ISO8859-1”q行映射Q则直接L前面?#8220;00”卛_得到“D6 D0 CE C4”Q这是ASCII码表中的四个字符Q而假如把它当作GB2312来进行映,得到的结果很可能是一大堆qQ因为在GB2312中有可能没有Q也有可能有Q字W与00D6{字W对应(如果对应不上Q将得到0x3fQ也是问号Q如果对应上了,׃00D6{字W太靠前Q估计也是一些特D符P真正的汉字在Unicode中的~码?E00开始)?br />   可以Q同LUnicode字符Q可以解释成不同的样子。当Ӟq其中有一U是我们期望的结果?br />   以上例而论Q?#8220;D6 D0 CE C4”应该是我们所惌的,当把“D6 D0 CE C4”输出到IE中时Q用“体中?#8221;方式查看Q就能看到清楚的“中文”两个字了?br />   Servlet中,当Compile-charset=Servlet-charsetӞ昄l果肯定正常?/p>

  ?最l结论:
  在Class输出字符串前Q会Unicode的字W串按照某一U内码重新生成字节流Q然后把字节输入,相当于进行了一?#8220;String.getBytes(???)”操作???代表某一U字W集?br />   如果是ServletQ那么,q种内码是在HttpServletResponse.setContentType()Ҏ中指定的内码Q也是上文定义的<Servlet-charsetQ?br />   如果是JSPQ那么,q种内码是在<%@ page contentType=""%Q中指定的内码,也就是上文定义的QJsp-charsetQ?br />   如果是JavaE序Q那么,q种内码是file.encoding中指定的内码Q默认ؓISO8859-1?/p>

5>l论
  在Jsp文g中,要指定contentTypeQ其中,charset的D与客L览器所用的字符集一P对于其中的字W串帔RQ不需做Q何内码{换;对于字符串变量,要求能根据ContentType中指定的字符集还原成客户端能识别的字节流Q简单地_是“字符串变量是ZQJsp- charsetQ字W集?#8221;Q?br />   在Servlet中,必须用HttpServletResponse.setContentType()讄charsetQ且讄成与客户端内码一_对于其中的字W串帔RQ需要在Javac~译时指定encodingQ这个encoding必须与编写源文g的^台的字符集一P一般说来都?GB2312或GBKQ对于字W串变量Q与JSP一P必须“是基于<Servlet-charsetQ字W集?#8221;?nbsp;



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1339656



hilor 2008-02-20 16:32 发表评论
]]>
JAVA字符~码pd一QUnicode,GBK,GB2312,UTF-8概念基础(?http://www.aygfsteel.com/hilor/articles/180893.htmlhilorhilorWed, 20 Feb 2008 08:29:00 GMThttp://www.aygfsteel.com/hilor/articles/180893.htmlhttp://www.aygfsteel.com/hilor/comments/180893.htmlhttp://www.aygfsteel.com/hilor/articles/180893.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/180893.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/180893.htmlq两天抽旉又ȝ/整理了一下各U编码的实际~码方式Q和在Java应用中的使用情况Q在q里记录下来以便日后参考?/div>
Z构成一个完整的Ҏ字编码的认识和深入把握,以便处理在Java开发过E中遇到的各U问题,特别是ؕ码问题,我觉得组成一个系列来描述和分析更好一些,包括三篇文章Q?/div>
W一:JAVA字符~码pd一Q?a >Unicode,GBK,GB2312,UTF-8概念基础
 
W一:JAVA字符~码pd一QUnicode,GBK,GB2312,UTF-8概念基础
本部分采用重用,转蝲一文章来完成q部分的目标?/div>
来源Qholen'blog   对字W编码与Unicode,ISO 10646,UCS,UTF8,UTF16,GBK,GB2312的理?/div>
地址Qhttp://blog.donews.com/holen/archive/2004/11/30/188182.aspx
 
Unicode:

unicode.org制定的编码机? 要将全世界常用文字都函括q去.
?.0中是16位编? 由U+0000到U+FFFF. 每个2byte码对应一个字W? ?.0开始抛弃了16位限? 原来?6位作为基本位q面, 另外增加?6个位q面, 相当?0位编? ~码范围0?x10FFFF.

UCS:

ISO制定的ISO10646标准所定义?Universal Character Set, 采用4byte~码.

Unicode与UCS的关p?

ISO 与unicode.org是两个不同的l织, 因此最初制定了不同的标? 但自从unicode2.0开? unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646不会给出0x10FFFF的UCS-4~码赋? 使得两者保持一?

UCS的编码方?

  • UCS-2, 与unicode?byte~码基本一?
  • UCS-4, 4byte~码, 目前是在UCS-2前加?个全零的byte.

    UTF: Unicode/UCS Transformation Format
  • UTF-8, 8bit~码, ASCII不作变换, 其他字符做变长编? 每个字符1-3 byte. 通常作ؓ外码. 有以下优?
    * 与CPU字节序无关, 可以在不同^C间交?br /> * 定w能力? M一个字节损坏后, 最多只会导致一个编码码位损? 不会N错误(如GB码错一个字节就会整行ؕ?
  • UTF-16, 16bit~码, 是变长码, 大致相当?0位编? 值在0?x10FFFF之间, 基本上就是unicode~码的实? 它是变长? 与CPU字序有关, 但因为最省空? 怽为网l传输的外码.
    UTF-16是unicode的preferred encoding.
  • UTF-32, 仅用了unicode范围(0?x10FFFF)?2位编? 相当于UCS-4的子?

    UTF与unicode的关p?

    Unicode是一个字W集, 可以看作为内?
    而UTF 是一U编码方? 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接是unicode~码, 没有变换, 但它包含?x00在编码内, ?56字节码的W一个byte都是0x00, 在操作系l?C语言)中有Ҏ意义, 会引起问? 采用UTF-8~码对unicode的直接编码作些变换可以避免这问题, q带来一些优?

    中国国标~码:
  • GB 13000: 完全{同于ISO 10646-1/Unicode 2.1, 今后也将随ISO 10646/Unicode的标准更改而同步更?
  • GBK: 对GB2312的扩? 以容UGB2312字符集范围以外的Unicode 2.1的统一汉字部分, q且增加了部分unicode中没有的字符.
  • GB 18030-2000: ZGB 13000, 作ؓUnicode 3.0的GBK扩展版本, 覆盖了所有unicode~码, C{同于UTF-8, UTF-16, 是一Uunicode~码形式. 变长~码, 用单字节/双字?4字节对字W编? GB18030向下兼容GB2312/GBK.
    GB 18030是中国所有非手持/嵌入式计机pȝ的强制实施标?


    -------------------------------


     

    什么是 UCS ?ISO 10646?

    国际标准 ISO 10646 定义?通用字符?(Universal Character Set, UCS). UCS 是所有其他字W集标准的一个超? 它保证与其他字符集是双向兼容? 是? 如果你将M文本字符串翻译到 UCS格式, 然后再翻译回原编? 你不会丢׃Q何信?

    UCS 包含了用于表达所有已知语a的字W? 不仅包括拉丁?希腊? 斯拉夫语,希伯来语,阿拉伯语,亚美g语和乔治亚语的描q? q包括中? 日文和韩文这L象Ş文字, 以及 q_? 片假? 孟加拉语, 旁遮普语果鲁I奇字符(Gurmukhi), 泰米语, ?埃纳徯(Kannada), Malayalam, 泰国? 老挝? 汉语拼音(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu 以及其他CC清的? 对于q没有加入的语言, ׃正在研究怎样在计机中最好地~码它们, 因而最l它们都被加入. q些语言包括 Tibetian, 高棉? Runic(古代北欧文字), 埃塞俄比亚语, 其他象Ş文字, 以及各种各样的印-Ƨ语pȝ语言, q包括挑选出来的艺术语言比如 Tengwar, Cirth 和克林A?Klingon). UCS q包括大量的囑Ş? 印刷用的, 数学用的和科学用的符? 包括所有由 TeX, Postscript, MS-DOSQMS-Windows, Macintosh, OCR 字体, 以及许多其他字处理和出版pȝ提供的字W?

    ISO 10646 定义了一?31 位的字符? 然? 在这巨大的编码空间中, q今为止只分配了?65534 个码?(0x0000 ?0xFFFD). q个 UCS ?16位子集称?基本多语a?(Basic Multilingual Plane, BMP). 被~码?16 ?BMP 以外的字W都属于非常Ҏ的字W?比如象Ş文字), 且只有专家在历史和科学领域里才会用到它们. 按当前的计划, 来也许再也不会有字W被分配C 0x000000 ?0x10FFFF q个覆盖了超q?100 万个潜在的未来字W的 21 位的~码I间以外M. ISO 10646-1 标准W一ơ发表于 1993 q? 定义了字W集?BMP 中内容的架构. 定义 BMP 以外的字W编码的W二部分 ISO 10646-2 正在准备? 但也许要q好几年才能完成. 新的字符仍源源不断地加入?BMP ? 但已l存在的字符是稳定的且不会再改变?

    UCS 不仅l每个字W分配一个代? 而且赋予了一个正式的名字. 表示一?UCS ?Unicode 值的十六q制? 通常在前面加?"U+", p U+0041 代表字符"拉丁大写字母A". UCS 字符 U+0000 ?U+007F ?US-ASCII(ISO 646) 是一致的, U+0000 ?U+00FF ?ISO 8859-1(Latin-1) 也是一致的. ?U+E000 ?U+F8FF, 已经 BMP 以外的大范围的编码是为私用保留的.

    什么是l合字符?

    UCS里有些编码点分配l了 l合字符. 它们cM于打字机上的无间隔重音键. 单个的组合字W不是一个完整的字符. 它是一个类g重音W或其他指示标记, 加在前一个字W后? 因? 重音W可以加在Q何字W后? 那些最重要的被加重的字W? p普通语a的正字法(orthographies of common languages)里用到的那种, ?UCS 里都有自q位置, 以确保同老的字符集的向后兼容? 既有自己的编码位|? 又可以表CZؓ一个普通字W跟随一个组合字W的被加重字W? 被称?预作字符(precomposed characters). UCS 里的预作字符是ؓ了同没有预作字符的旧~码, 比如 ISO 8859, 保持向后兼容性而设? l合字符机制允许在Q何字W后加上重音W或其他指示标记, q在U学W号中特别有? 比如数学方程式和国际x字母, 可能会需要在一个基本字W后l合上一个或多个指示标记.

    l合字符跟随着被修饰的字符. 比如, 徯中的元音变音字符 ("拉丁大写字母A 加上分音W?), 既可以表CZؓ UCS ?U+00C4 的预作字W? 也可以表C成一个普?"拉丁大写字母A" 跟着一?l合分音W?:U+0041 U+0308 q样的组? 当需要堆叠多个重音符, 或在一个基本字W的上面和下面都要加上组合标记时, 可以使用多个l合字符. 比如在泰国文? 一个基本字W最多可加上两个l合字符.

    什么是 UCS 实现U别?

    不是所有的pȝ都需要支持象l合字符q样?UCS 里所有的先进机制. 因此 ISO 10646 指定了下列三U实现?

    U别1
    不支持组合字W和 Hangul Jamo 字符 (一U特别的, 更加复杂的韩国文的编? 使用两个或三个子字符来编码一个韩文音?
    U别2
    cM于?, 但在某些文字? 允许一列固定的l合字符 (例如, 希伯来文, 阿拉伯文, Devangari, 孟加拉语, 果鲁I奇? Gujarati, Oriya, 泰米语, Telugo, ?埃纳徯, Malayalam, 泰国语和老挝?. 如果没有q最L的几个组合字W? UCS ׃能完整地表达q些语言.
    U别3
    支持所有的 UCS 字符, 例如数学家可以在L一个字W上加上一?tilde(颚化W号,西班牙语字母上面的~)或一个箭?或两者都?.

    什么是 Unicode?

    历史? 有两个独立的, 创立单一字符集的试. 一个是国际标准化组l?ISO)?ISO 10646 目, 另一个是?一开始大多是国?多语a软g刉商l成的协会组l的 Unicode 目. q运的是, 1991q前? 两个目的参与者都认识? 世界不需要两个不同的单一字符? 它们合ƈ双方的工作成? qؓ创立一个单一~码表而协同工? 两个目仍都存在q独立地公布各自的标? ?Unicode 协会?ISO/IEC JTC1/SC2 都同意保?Unicode ?ISO 10646 标准的码表兼? q紧密地共同调整M未来的扩?

    那么 Unicode ?ISO 10646 不同在什么地?

    Unicode 协会公布?Unicode 标准 严密地包含了 ISO 10646-1 实现U别3的基本多语言? 在两个标准里所有的字符都在相同的位|ƈ且有相同的名?

    Unicode 标准额外定义了许多与字符有关的语义符号学, 一般而言是对于实现高质量的印刷出版系l的更好的参? Unicode 详细说明了绘制某些语a(比如阿拉伯语)表达形式的算? 处理双向文字(比如拉丁与希伯来文؜合文?的算法和 排序与字W串比较 所需的算? 以及其他许多东西.

    另一斚w, ISO 10646 标准, pqؓ人知?ISO 8859 标准一? 只不q是一个简单的字符集表. 它指定了一些与标准有关的术? 定义了一些编码的别名, q包括了规范说明, 指定了怎样使用 UCS q接其他 ISO 标准的实? 比如 ISO 6429 ?ISO 2022. q有一些与 ISO 紧密相关? 比如 ISO 14651 是关?UCS 字符串排序的.

    考虑?Unicode 标准有一个易记的名字, 且在M好的书店里的 Addison-Wesley 里有, 只花?ISO 版本的一部? 且包括更多的辅助信息, 因而它成ؓ使用q泛得多的参考也׃ؓ奇了. 然? 一般认? 用于打印 ISO 10646-1 标准的字体在某些斚w的质量要高于用于打印 Unicode 2.0? 专业字体设计者L被徏议说要两个标准都实现, 但一些提供的样例字Ş有显著的区别. ISO 10646-1 标准同样使用四种不同的风格变体来昄表意文字如中? 日文和韩?(CJK), ?Unicode 2.0 的表里只有中文的变体. q导致了普遍的认?Unicode Ҏ本用h说是不可接收的传? 管是错误的.

    什么是 UTF-8?

    首先 UCS ?Unicode 只是分配整数l字W的~码? 现在存在好几U将一串字W表CZؓ一串字节的Ҏ. 最显而易见的两种Ҏ是将 Unicode 文本存储?2 ??4 个字节序列的? q两U方法的正式名称分别?UCS-2 ?UCS-4. 除非另外指定, 否则大多数的字节都是q样?Bigendian convention). 一?ASCII ?Latin-1 的文件{换成 UCS-2 只需单地在每?ASCII 字节前插?0x00. 如果要{换成 UCS-4, 则必d每个 ASCII 字节前插入三?0x00.

    ?Unix 下?UCS-2 (?UCS-4) 会导致非怸重的问题. 用这些编码的字符串会包含一些特D的字符, 比如 '\0' ?'/', 它们?文g名和其他 C 库函数参数里都有特别的含? 另外, 大多C?ASCII 文g?UNIX 下的工具, 如果不进行重大修Ҏ无法d 16 位的字符? Zq些原因, 在文件名, 文本文g, 环境变量{地? UCS-2 不适合作ؓ Unicode 的外部编?

    ?ISO 10646-1 Annex R ?RFC 2279 里定义的 UTF-8 ~码没有q些问题. 它是?Unix 风格的操作系l下使用 Unicode 的明昄Ҏ.

    UTF-8 有一下特?

    • UCS 字符 U+0000 ?U+007F (ASCII) 被编码ؓ字节 0x00 ?0x7F (ASCII 兼容). q意味着只包?7 ?ASCII 字符的文件在 ASCII ?UTF-8 两种~码方式下是一L.
    • 所?>U+007F ?UCS 字符被编码ؓ一个多个字节的? 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作ZQ何其他字W的一部分.
    • 表示?ASCII 字符的多字节串的W一个字节L?0xC0 ?0xFD 的范围里, q指个字W包含多个字节. 多字节串的其余字节都?0x80 ?0xBF 范围? q得重新同步非常容? qɾ~码无国? 且很受丢失字节的媄?
    • 可以~入所有可能的 231?UCS 代码
    • UTF-8 ~码字符理论上可以最多到 6 个字节长, 然?16 ?BMP 字符最多只用到 3 字节?
    • Bigendian UCS-4 字节串的排列序是预定的.
    • 字节 0xFE ?0xFF ?UTF-8 ~码中从未用?

    下列字节串用来表CZ个字W? 用到哪个串取决于该字W在 Unicode 中的序号.

    U-00000000 - U-0000007F: 0xxxxxxx
    U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
    U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
    U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    xxx 的位|由字符~码数的二进制表C的位填? 靠右的 x h少的特D意? 只用最短的那个_表达一个字W编码数的多字节? 注意在多字节串中, W一个字节的开?1"的数目就是整个串中字节的数目.

    例如: Unicode 字符 U+00A9 = 1010 1001 (版权W号) ?UTF-8 里的~码?

    11000010 10101001 = 0xC2 0xA9

    而字W?U+2260 = 0010 0010 0110 0000 (不等? ~码?

    11100010 10001001 10100000 = 0xE2 0x89 0xA0

    q种~码的官方名字拼写ؓ UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在Q何文中用其他名?(比如 utf8 ?UTF_8) 来表C?UTF-8, 当然除非你指的是一个变量名而不是这U编码本w?

    什么编E语a支持 Unicode?

    在大U?1993 q之后开发的大多数现代编E语a都有一个特别的数据cd, 叫做 Unicode/ISO 10646-1 字符. ?Ada95 中叫 Wide_Character, ?Java 中叫 char.

    ISO C 也详l说明了处理多字节编码和宽字W?(wide characters) 的机? 1994 q?9 ?Amendment 1 to ISO C 发表时又加入了更? q些机制主要是ؓ各类东亚~码而设计的, 它们比处?UCS 所需的要健壮得多. UTF-8 ?ISO C 标准调用多字节字W串的编码的一个例? wchar_t cd可以用来存放 Unicode 字符.



  • hilor 2008-02-20 16:29 发表评论
    ]]>Linux下安装Tomcat5.5Qƈq行优化 http://www.aygfsteel.com/hilor/articles/180637.htmlhilorhilorTue, 19 Feb 2008 04:56:00 GMThttp://www.aygfsteel.com/hilor/articles/180637.htmlhttp://www.aygfsteel.com/hilor/comments/180637.htmlhttp://www.aygfsteel.com/hilor/articles/180637.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/180637.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/180637.html Linux下安装Tomcat5.5Qƈq行优化
    1. 安装JDK1.5  (Tomcat5.5必须要JDK1.5以上版本)
    1)下蝲RPM包或bin?
    2)安装步骤
      a. 如果是bin包,需?chmod 777  jdk-1_5_0_12-linux-i586-rpm.bin
         然后执行  ./jdk-1_5_0_12-linux-i586-rpm.bin
      b. 软g自动安装?/usr/java/jdk1.5.0_12
      c. vi ~/.bash_profile
         在PATH后面d:/usr/java/jdk1.5.0_12/bin

    2.安装Tomcat5.5
    1)下蝲源码?nbsp; apache-tomcat-5.5.23.tar.gz
       下蝲地址Qhttp://tomcat.apache.org
    2)安装步骤
       a. tar zxvf apache-tomcat-5.5.23.tar.gz /usr/local/tomcat1
          tar zxvf apache-tomcat-5.5.23.tar.gz /usr/local/tomcat2
       b. 修改  bin/catalina.sh
          JAVA_HOME=/usr/java/jdk1.5.0_12
          JAVA_OPTS=' -Xms256m -Xmx512m -XX:PermSize=512M -XX:MaxPermSize=512m '  
    3)起停
      /usr/local/tomcat1/bin/startup.sh|shutdown.sh

    3.安装Tomcat-Nativeq接APRQ提高静态资源的讉K性能
    1)下蝲软g?nbsp; tomcat-native-1.1.10-src.tar.gz
       下蝲地址Qhttp://archive.apache.org/dist/tomcat/tomcat-connectors/native/
    2)apr和apr-util的安装参?span class="ubb_link">Linux下Apache和Apr整合Q提高Apache性能
    2)安装步骤
       a. tar zxvf tomcat-native-1.1.10-src.tar.gz
       b. cd /tomcat-native-1.1.10-src/jni/native
       c. ./configure --prefix=/usr/local/apache2/apr --with-apr=/usr/local/apache2/apr --with-java-home=/usr/java/jdk1.5.0_12
       d. make
       e. make install
       f. 修改  bin/catalina.sh d CATALINA_OPTS=' -Djava.library.path=/usr/local/apache2/apr '


    hilor 2008-02-19 12:56 发表评论
    ]]>
    java string与datecd转换http://www.aygfsteel.com/hilor/articles/159327.htmlhilorhilorFri, 09 Nov 2007 04:27:00 GMThttp://www.aygfsteel.com/hilor/articles/159327.htmlhttp://www.aygfsteel.com/hilor/comments/159327.htmlhttp://www.aygfsteel.com/hilor/articles/159327.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/159327.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/159327.html
  • /**
        SimpleDateFormat函数语法Q?br />   
             G q代标志W?br />          y q?br />          M ?br />          d ?br />          h ?在上午或下午 (1~12)
             H ?在一天中 (0~23)
             m ?br />          s U?br />          S 毫秒
             E 星期
             D 一q中的第几天
             F 一月中W几个星期几
             w 一q中W几个星?br />          W 一月中W几个星?br />          a 上午 / 下午 标记W?
             k ?在一天中 (1~24)
             K ?在上午或下午 (0~11)
             z 时区
  • 常见标准的写?yyyy-MM-dd HH:mm:ss",注意大小写,旉?4时Ӟ24时制{换成12时制只需HHҎhh,不需要另外的函数?/font>
    */
  • DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");        
  • DateFormat format 2= new SimpleDateFormat("yyyyqMM月dd?HH时mm分ssU?);        
  • Date date = null;   
  • String str = null;                 
  •            
  • // String转Date   
  • str = "2007-1-18";         
  • try {   
  •            date = format1.parse(str);  
  •            data = format2.parse(str);
  • } catch (ParseException e) {   
  •            e.printStackTrace();   
  • }   
  •         
  • //Date转String
  • date=new Date();
  • str=format1.format(date);
  • str=format2.format(date);
  •  

     

     

    1、Date—?gt;String
    String sdate;
    Date ddate;
    ……
    sdate=(new SimpleDateFormat("yyyy-MM-dd")).format(ddate);
    2、String—?gt;Date
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    sdf.setLenient(false);
    String sdate="2006-06-06";
    Date ddate;
    ddate=sdf.parse(sdate);
    另外Integer、Double{数据包装类型与Stringcd的相互{?/strong>为:
    Q以IntegerZQ?/div>
    Integer—?gt;String
    Integer ii;
    String si;
    ……
    si=ii.toString;
    String—?gt;Intteger
    Integer ii;
    String si;
    ……
    ii=Integer.valueOf(si);
    附:
    日期和时间模?摘自JDK1.50 DOC)

    日期和时间格式由日期和时间模?/em> 字符串指定。在日期和时间模式字W串中,未加引号的字?'Z' ?'z' 被解释ؓ模式字母Q用来表C日期或旉字符串元素。文本可以用单引号 ("''" 表示单引受所有其他字W均不解释;只是在格式化时将它们单复制到输出字符Ԍ或者在分析时与输入字符串进行匹配?

    定义了以下模式字母(所有其他字W?'Z' ?'z' 都被保留Q:

    字母 日期或时间元? 表示 CZ
    Text Year 96
    Month Jul; Number W 月䆾中的周数 Number Number d 月䆾中的天数 Number Number E 星期中的天数 Text Tue
    Text H 一天中的小时数Q?-23Q? Number Number K am/pm 中的时敎ͼ0-11Q? Number Number m 时中的分钟? Number Number S 毫秒? Number General time zone PST; Z 时区 RFC 822 time zone

    hilor 2007-11-09 12:27 发表评论
    ]]>javascriptҎ字符转换http://www.aygfsteel.com/hilor/articles/153819.htmlhilorhilorThu, 18 Oct 2007 03:53:00 GMThttp://www.aygfsteel.com/hilor/articles/153819.htmlhttp://www.aygfsteel.com/hilor/comments/153819.htmlhttp://www.aygfsteel.com/hilor/articles/153819.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/153819.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/153819.htmljavascript和JAVA一?一些特D字W需要{?/div>
     
    特别是在一些JSP|页的开发中,好多E序员经怼忘掉q点,
    ?
    1 <% List textList = (List)request.getAttribute("textList"); %>
    2 <script>
    3 <!--
    4 var txtList = new Array();
    5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
    6 txtList[<%=i%>= "<%=textList.get(i)%>";
    7 <% } %>
    8 -->
    9 </script>
     
    q段JS存在问?未对ҎW号q行处理.有特D符L情况下有可能报JSERROR
     
    JAVASCRIPT中需要{义的?
     
    转义序列 字符
    \b 退?/font>
    \f 走纸换页
    \n 换行
    \r 回R
    \t 横向x (Ctrl-I)
    \' 单引?/font>
    \" 双引?/font>
    \\ 反斜?/font>

    此外,?W号我觉得也有必要进行处?因ؓ?--></script> q样的字W串也会使SCRIPT出错.
     
    下面提供一个比较实用java的方?做这个特D符L处理:
     1public class JavaScriptUtils {
     2 public static String javaScriptEscape(String input) {
     3  if (input == null{
     4   return input;
     5  }

     6  StringBuffer filtered = new StringBuffer(input.length());
     7  char prevChar = '\u0000';
     8  char c;
     9  for (int i = 0; i < input.length(); i++{
    10   c = input.charAt(i);
    11   if (c == '"'{
    12    filtered.append("\\\"");
    13   }

    14   else if (c == '\'') {
    15    filtered.append("\\'");
    16   }

    17   else if (c == '\\'{
    18    filtered.append("\\\\");
    19   }

    20   else if (c == '\t'{
    21    filtered.append("\\t");
    22   }

    23   else if (c == '\n'{
    24    if (prevChar != '\r'{
    25     filtered.append("\\n");
    26    }

    27   }

    28   else if (c == '\r'{
    29    filtered.append("\\n");
    30   }
     else if (c == '\f'{
    31                filtered.append("\\f");
    32  }
     else if (c == '/'{
    33                filtered.append("\\/");
    34            }

    35   else {
    36    filtered.append(c);
    37   }

    38   prevChar = c;
    39  }

    40  return filtered.toString();
    41 }

    42}
    43


    上面的例子应改ؓ:
    1 <% List textList = (List)request.getAttribute("textList"); %>
    2 <script>
    3 <!--
    4 var txtList = new Array();
    5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
    6 txtList[<%=i%>= "<%=JavaScriptUtils.javaScriptEscape(textList.get(i))%>";
    7 <% } %>
    8 -->
    9 </script>


    hilor 2007-10-18 11:53 发表评论
    ]]>
    开始→q行→输入的命o集锦http://www.aygfsteel.com/hilor/articles/153227.htmlhilorhilorTue, 16 Oct 2007 04:44:00 GMThttp://www.aygfsteel.com/hilor/articles/153227.htmlhttp://www.aygfsteel.com/hilor/comments/153227.htmlhttp://www.aygfsteel.com/hilor/articles/153227.html#Feedback0http://www.aygfsteel.com/hilor/comments/commentRss/153227.htmlhttp://www.aygfsteel.com/hilor/services/trackbacks/153227.html开?#8594;q行→输入的命令集?br /> gpedit.msc-----l策?

      sndrec32-------录音?

      Nslookup-------IP地址侦测?

      explorer-------打开资源理?

      logoff---------注销命o

      tsshutdn-------60U倒计时关机命?

      lusrmgr.msc----本机用户和组

      services.msc---本地服务讄

      oobe/msoobe /a----查XP是否Ȁz?

      notepad--------打开C?

      cleanmgr-------垃圾整理

      net start messenger----开始信使服?

      compmgmt.msc---计算机管?

      net stop messenger-----停止信服务

      conf-----------启动 netmeeting

      dvdplay--------DVD播放?

      charmap--------启动字符映射?

      diskmgmt.msc---盘理实用E序

      calc-----------启动计算?

      dfrg.msc-------盘片整理E序

      chkdsk.exe-----Chkdsk盘?

      devmgmt.msc--- 讑֤理?

      regsvr32 /u *.dll----停止dll文gq行

      drwtsn32------ pȝȝ

      rononce -p ----15U关?

      dxdiag---------查DirectX信息

      regedt32-------注册表编辑器

      Msconfig.exe---pȝ配置实用E序

      rsop.msc-------l策略结果集

      mem.exe--------昄内存使用情况

      regedit.exe----注册?

      winchat--------XP自带局域网聊天

      progman--------E序理?

      winmsd---------pȝ信息

      perfmon.msc----计算机性能监测E序

      winver---------查Windows版本

      sfc /scannow-----扫描错误q复?

      taskmgr-----d理器(2000QxpQ?003)



    hilor 2007-10-16 12:44 发表评论
    ]]>
    վ֩ģ壺 | ͼ| Ρɽ| | ͨ| Ƶ| | ˮ| | ʯׯ| | | | | | Ӻ| | Ϳ| | | â| | Դ| ԰| | ɽ| Ӷ| ͭ| | ƽ| | ֽ| | γ| | ͷ| ˺| ½| | | կ|