??xml version="1.0" encoding="utf-8" standalone="yes"?> 所以我必须捆绑MSN啊,人在江湖飘,谁能不挨刀啊,马克·安d同学至今都很郁闗?BR> rry和DavidQYahoo 创始人)(j)有Terry SemelQYahoo CEOQ、Larry Page和Sergey Brin 参数说明
发信? 饮水思源 (2005q?6?0?2:58:36 星期?, 站内信g
发给QPony Ma
抄送:(x)丁丁Q汪ӞCharlesQ雷P鸿祎
发自QBill Gates
重要性:(x)?BR>
Dear PonyQ?BR> 冒昧l你写emailQ听说你Ҏ(gu)有些意见Q我惛_你做一些私Z,以下是我?
Ҏ(gu)见,不代表microsoft官方态度Q)(j)
1、h在江湖飘Q谁能不挨刀
听说你的注册用户数有两三亿,同时在线人数都超q?000万了(jin)Q虽然我有点怀疑,
不过q是很让我震惊啊Q你们干得真的很不错Q我很庆(jin)q我q有windowsQ还有捆l的?BR>家本领,否则我基本上没什么办法了(jin)Q感谢伟大的IBMQ感谢伟大的盗版事业Q感谢我
的爸爸妈妈…?BR>
我承认我的这个看家本领是有点不太厚道Q真的,我很理解老弟你的?j)情Q但是,b
usiness is businessQ网l太open?jin),占领l端很重要啊Q当q我好不Ҏ(gu)搞定Netsca
peQ用IE占领?jin)地址栏,才过上了(jin)几年q福的网l生z,IM的时代,我怎么能缺席呢Q?BR>
2、这q头Q谁的屁股都不干净
再说捆绑Q老弟你也不陌生啊Q只是用得不太熟l。你q记?9q的OICQ多大嘛?1
MQ还?00KQ小巧玲珑啊Q现在呢QQQ都快50M?jin)吧Q几q膨胀?jin)几十倍啊Q那些游?BR>、音乐、硬盘、邮׃?qing)一堆ؕ七八p的东西不都是捆l嘛Q搞得大安说QQ臃肿Q其
实只不过因ؓ(f)你的根基太小Q只是一个IM软gQ加点东西太明显?jin),而我的windows可是
OSQ你的家当还是不够丰厚啊?BR>
所以老弟也不用抱怨太多,周`同学说q,q年_(d)谁的屁股都不太干净Q还?BR>比较话糙理不p的。另外,关于Jerry要开掉周同学的传a已经很久?jin),我的Uh说是6
月䆾有分晓Q你有什么最新消息嘛Q?BR>
3、你太低调,太不酷了(jin)Q找个CEO吧,代理的也?BR>
tencent上市(jng)?jin),不错Q但上市(jng)之后都干?jin)什么?除了(jin)QQ变得来大Q好像什么都
没干Q虽然在诅R老子》之余,我的朋友陈天桥把好公叔R收购?jin),但你也别q瞪g
动手啊,好歹有点资本q作Q给投资Z个想象的I间也好啊?BR>
其实我明白你的压力,上市(jng)?jin)嘛Q每个季度都要发财报Q投资h的d行大安知道
Q一个季度业l不增长p发飙Q做CEO日子难过啊。不q你其实可以q得潇洒一点,Je
QGoogle创始人)(j)有Schmidt打理一切,多省?j)啊Q不光活得自在,大家q觉得他们很?BR>。我有Ballmer帮我打理Q也才有旉d炏Vthe road ahead》之cȝ畅销书,lmicr
osoft接下来要q的事做点科普工作也不错。其实私下地_(d)我对新技术的q钝地球人都
知道…?BR>
你向丁丁学习(fn)Q找一个象TedQ孙hQ一样CEOQ你可以象丁丁一h旉
学中ȝ?jin)?x)Q?BR>
4、你知道我ؓ(f)什么让他们那么折腾MSN.com.cn嘛?
msn.com.cn来了(jin)Q我知道你们那天也去“观摩”了(jin)Q相信老弟你也看出来了(jin)Q现?BR>的MSN.com.cn看上ȝ是一个灾难。我让他们折腾是因ؓ(f)反正MSNq早总要q来的,不如
先来占个地儿Q别老让中国用户觉得MSN是MSN MessengerQ那也很p糕啊?BR>
新浪已经把中国的门户带入?jin)死胡同Q用q乎抢劫的方式抢夺报U、杂志、电(sh)视的
内容堆积Z个v量信息的门户Q搜狐已l证明,谁也复发复制出另一个新,很可?BR>Q看上去qq.com正在走这一条道路,管你可以用qq来推高用h量,但h(hun)g在?
所以我让他们折腾MSN.com.cnQ随便折腾,只要不太q分pQ反正Nq之内,q过
新浪q是比较困难的,我有充分的时间来做我的MSN服务Q那时longhorn应该也会(x)捆绑一
些新东西来帮忙的Q暂时保密:(x)Q?BR>
5、QQ不是社?x)网l?BR> 现在C会(x)|络很流行,g大家都很明白Q实际上怎么收费?j)里都还没谱呢,没?BR>是一个bubbleQ所以QQ也该掺和掺和Q说不定有一天大安恍然大?zhn)了(jin)呢Q到时候再
q可来不及(qing)拉?BR>
IM软g做社?x)网l似乎是水到渠成Q但实际上太不一样了(jin)。可能是技术难度太低了(jin)
Q我的那帮高薪Y件工E师觉得很不适应Q想?jin)好久才弄出那个spaces的,虽然国?BR>不怎么喜欢Q但中国用户好像反响q不错,聊胜于无吧?BR>
其实你们那个QQ真的很好玩Q尤其是有个叫“新q”的,真的太“胜怠Z了(jin)
Q谁想了(jin)解这个词的含义,L(fng)a^_^Q,但不是社?x)网l,不过l大部分的QQ用户g
都兴不大,可能太年M(jin)。QQ该怎么弄社?x)网l,怿你也很困扎ͼ但千万不要放?BR>啊,老弟?BR>
其实我应该感谢你Q是QQ普及(qing)?jin)中国小朋友对IM的了(jin)解,{他们长大了(jin)Q工作了(jin)Q?BR>有钱?jin),慢慢{Ud?jin)MSNQ无~切换,配合默契啊:(x)Q?BR>
可能q些都不太中听,哥们也不要太担心(j)Q中国市(jng)场很大,让我们一起去开拓吧Q?BR>与君共勉Q?BR>
yours,Bill
]]>
]]>
上传囄q生成略~图
FileBox:上传表单中的表单?BR>SavePath:保存路径
ThumbnailWidth:略羃囑֮
ThumbnailHeight:略羃N
FilePath:文g保存路径Q输出参敎ͼ(j)
FileName:文g名称Q输出参敎ͼ(j)
LastError:Q输出错误)(j)
public static bool UploadImages(System.Web.UI.HtmlControls.HtmlInputFile FileBox,string SavePath,Int32 ThumbnailWidth,Int32 ThumbnailHeight,out String FilePath,out String FileName,out string LastError)
{
DateTime datTime=System.DateTime.Now;
String strTemp;
string strFileName = FileBox.PostedFile.FileName;
bool blnResult;
LastError="";
System.Drawing.Image xImage;
System.Drawing.Bitmap xBitmap;
int PhotoHeight,PhotoWidth;
string BasePath=System.Web.HttpContext.Current.Server.MapPath("../");
Rectangle NewPhoto;
System.Drawing.Imaging.ImageFormat xObject;
string Extension="";
FileName="";
FilePath="";
try
{
if(strFileName=="")
{
LastError="L(fng)?yn)L览选择要上传的文g!";
return false;
}
if(Convert.ToDecimal(FileBox.PostedFile.ContentLength)<= 2000000 &&Convert.ToDecimal(FileBox.PostedFile.ContentLength)>1500)
{
//查看扩展名是否合?BR>Extension=Path.GetExtension(strFileName);
Extension=Extension.ToLower();
if(Extension==".gif" || Extension==".jpg" || Extension==".jpeg" || Extension==".bmp")
{
switch(Extension)
{
case ".gif":
xObject=System.Drawing.Imaging.ImageFormat.Gif;
break;
case ".bmp":
xObject=System.Drawing.Imaging.ImageFormat.Bmp;
break;
default:
xObject=System.Drawing.Imaging.ImageFormat.Jpeg;
break;
}
}
else
{
LastError="上传的文件不是有效的囄文gQ请上传格式为:(x).gif.jpg.bmp的文Ӟ";
return false;
}
//-----------------------------
//生成保存的文件\径及(qing)文g?BR>//-----------------------------
strTemp = datTime.ToShortDateString().Replace( "-", "");
FileName = datTime.ToLongTimeString().Replace(":","")+ Extension;
FilePath = SavePath + strTemp + "/";
Friendlib.Function.CreateDirectory(BasePath + FilePath);
//保存大图
xImage=System.Drawing.Bitmap.FromStream(FileBox.PostedFile.InputStream);
xImage.Save(BasePath+FilePath+FileName);
xImage.Dispose();
//-----------------------------
//开始生成羃略图
//-----------------------------
xBitmap=new Bitmap(BasePath+FilePath+FileName);//------------------
PhotoHeight=xBitmap.Height;
PhotoWidth=xBitmap.Width;
// //判断囄的Ş?
if(Convert.ToDecimal(PhotoHeight)/Convert.ToDecimal(PhotoWidth)>Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth))//高有?
{
PhotoHeight=Convert.ToInt16((Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth))*Convert.ToDecimal(PhotoWidth));
NewPhoto=new Rectangle(0,0,PhotoWidth,PhotoHeight);
}
else if(Convert.ToDecimal(PhotoHeight)/Convert.ToDecimal(PhotoWidth)<Convert.ToDecimal(ThumbnailHeight)/Convert.ToDecimal(ThumbnailWidth))
{
PhotoWidth=Convert.ToInt16((Convert.ToDecimal(ThumbnailWidth)/Convert.ToDecimal(ThumbnailHeight))*Convert.ToDecimal(PhotoHeight));
NewPhoto=new
Rectangle(Convert.ToInt16((Convert.ToDecimal(xBitmap.Width)-Convert.ToDecimal(PhotoWidth))/2),0,PhotoWidth,PhotoHeight);
}
else
{
NewPhoto= newRectangle(0,0,PhotoWidth,PhotoHeight); < BR> }
System.Drawing.Image myBitmap;
myBitmap=xBitmap.Clone(NewPhoto,System.Drawing.Imaging.PixelFormat.DontCare);
System.Drawing.Image.GetThumbnailImageAbort myCallback = new
System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
System.Drawing.Image myThumbnail =
myBitmap.GetThumbnailImage(ThumbnailWidth,ThumbnailHeight, myCallback,
IntPtr.Zero); myThumbnail.Save(BasePath + FilePath +"s"+FileName,xObject);
myThumbnail.Dispose(); myBitmap.Dispose(); xBitmap.Dispose(); return true; }
else
{
blnResult=false; LastError="不能上传大于2M?qing)小?.5K的图?";
}
}< BR> catch (Exception ex) {
throw new System.Exception((ex.Message + ("\r\n" + ex.StackTrace)));
}
return blnResult;
}
private static bool ThumbnailCallback() { return false; }
]]>
1. API之网l函?
WNetAddConnection 创徏同一个网l资源的怹性连?
WNetAddConnection2 创徏同一个网l资源的q接
WNetAddConnection3 创徏同一个网l资源的q接
WNetCancelConnection l束一个网l连?
WNetCancelConnection2 l束一个网l连?
WNetCloseEnum l束一ơ枚举操?
WNetConnectionDialog 启动一个标准对话框Q以便徏立同|络资源的连?
WNetDisconnectDialog 启动一个标准对话框Q以便断开同网l资源的q接
WNetEnumResource 枚D|络资源
WNetGetConnection 获取本地或已q接的一个资源的|络名称
WNetGetLastError 获取|络错误的扩展错误信?
WNetGetUniversalName 获取|络中一个文件的q程名称以及(qing)/或者UNCQ统一命名规范Q名U?
WNetGetUser 获取一个网l资源用以连接的名字
WNetOpenEnum 启动对网l资源进行枚丄q程
2. API之消息函?
BroadcastSystemMessage 一条系l消息广播给pȝ中所有的H口
GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏q位|?
GetMessageTime 取得消息队列中上一条消息处理完毕时的时?
PostMessage 一条消息投递到指定H口的消息队?
PostThreadMessage 一条消息投递给应用E序
RegisterWindowMessage 获取分配l一个字串标识符的消息编?
ReplyMessage {复一个消?
SendMessage 调用一个窗口的H口函数Q将一条消息发l那个窗?
SendMessageCallback 一条消息发l窗?
SendMessageTimeout 向窗口发送一条消?
SendNotifyMessage 向窗口发送一条消?
3. API之文件处理函?
CloseHandle 关闭一个内核对象。其中包括文件、文件映、进E、线E、安全和同步对象{?
CompareFileTime Ҏ(gu)两个文g的时?
CopyFile 复制文g
CreateDirectory 创徏一个新目录
CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以?qing)控制?
CreateFileMapping 创徏一个新的文件映对?
DeleteFile 删除指定文g
DeviceIoControl 对设备执行指定的操作
DosDateTimeToFileTime DOS日期和时间D{换成一?win32 FILETIME ?
FileTimeToDosDateTime 一?win32 FILETIME D{换成DOS日期和时间?
FileTimeToLocalFileTime 一个FILETIMEl构转换成本地时?
FileTimeToSystemTime Ҏ(gu)一个FILETIMEl构的内容,装蝲一个SYSTEMTIMEl构
FindClose 关闭由FindFirstFile函数创徏的一个搜索句?
FindFirstFile Ҏ(gu)文g名查找文?
FindNextFile Ҏ(gu)调用FindFirstFile函数时指定的一个文件名查找下一个文?
FlushFileBuffers 针对指定的文件句柄,h内部文g~冲?
FlushViewOfFile 写入文件映缓冲区的所有数据都h到磁?
GetBinaryType 判断文g是否可以执行
GetCompressedFileSize 判断一个压~文件在盘上实际占据的字节?
GetCurrentDirectory 在一个缓冲区中装载当前目?
GetDiskFreeSpace 获取与一个磁盘的l织有关的信息,以及(qing)?jin)解剩余I间的容?
GetDiskFreeSpaceEx 获取与一个磁盘的l织以及(qing)剩余I间定w有关的信?
GetDriveType 判断一个磁盘驱动器的类?
GetExpandedName 取得一个压~文件的全名
GetFileAttributes 判断指定文g的属?
GetFileInformationByHandle q个函数提供?jin)获取文件信息的一U机?
GetFileSize 判断文g长度
GetFileTime 取得指定文g的时间信?
GetFileType 在给出文件句柄的前提下,判断文gcd
GetFileVersionInfo 从支持版本标记的一个模块里获取文g版本信息
GetFileVersionInfoSize 针对包含?jin)版本资源的一个文Ӟ判断容纳文g版本信息需要一个多大的~冲?
GetFullPathName 获取指定文g的完整\径名
GetLogicalDrives 判断pȝ中存在哪些逻辑驱动器字?
GetLogicalDriveStrings 获取一个字Ԍ其中包含?jin)当前所有逻辑驱动器的栚w动器路径
GetOverlappedResult 判断一个重叠操作当前的状?
GetPrivateProfileInt 为初始化文gQ?ini文gQ中指定的条目获取一个整数?
GetPrivateProfileSection 获取指定节Q在.ini文g中)(j)所有项名和值的一个列?
GetPrivateProfileString 为初始化文g中指定的条目取得字串
GetProfileInt 取得win.ini初始化文件中指定条目的一个整数?
GetProfileSection 获取指定节Q在win.ini文g中)(j)所有项名和值的一个列?
GetProfileString 为win.ini初始化文件中指定的条目取得字?
GetShortPathName 获取指定文g的短路径?
GetSystemDirectory 取得Windowspȝ目录Q即System目录Q的完整路径?
GetTempFileName q个函数包含?jin)一个(f)时文件的名字Q它可由应用E序使用
GetTempPath 获取Z(f)时文件指定的路径
GetVolumeInformation 获取与一个磁盘卷有关的信?
GetWindowsDirectory 获取Windows目录的完整\径名
hread 参考lread
hwrite 参考lwrite函数
lclose 关闭指定的文?
lcreat 创徏一个文?
llseek 讄文g中进行读写的当前位置
LockFile 锁定文g的某一部分Q其不与其他应用程序共?
LockFileEx 与LockFile怼Q只是它提供?jin)更多的功?
lopen 以二q制模式打开指定的文?
lread 文件中的数据读入内存缓冲区
lwrite 数据从内存~冲区写入一个文?
LZClose 关闭由LZOpenFile ?LZInit函数打开的一个文?
LZCopy 复制一个文?
LZInit q个函数用于初始化内部缓冲区
LZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压~文?
LZRead 数据从文gd内存~冲?
LZSeek 讄一个文件中q行d的当前位|?
MapViewOfFile 一个文件映对象映到当前应用E序的地址I间
MoveFile Ud文g
OpenFile q个函数能执行大量不同的文g操作
OpenFileMapping 打开一个现成的文g映射对象
QueryDosDevice 在Windows NT中,DOS讑֤名会(x)映射成NTpȝ讑֤名。该函数可判断当前的讑֤映射情况
ReadFile 从文件中d数据
ReadFileEx 与ReadFile怼Q只是它只能用于异步L作,q包含了(jin)一个完整的回调
RegCloseKey 关闭pȝ注册表中的一个项Q或键)(j)
RegConnectRegistry 讉Kq程pȝ的部分注册表
RegCreateKey 在指定的下创徏或打开一个项
RegCreateKeyEx 在指定项下创建新的更复杂的方式。在Win32环境中徏议用这个函?
RegDeleteKey 删除现有下方一个指定的子项
RegDeleteValue 删除指定下方的一个?
RegEnumKey 枚D指定的子项。在Win32环境中应使用RegEnumKeyEx
RegEnumKeyEx 枚D指定下方的子项
RegEnumValue 枚D指定的?
RegFlushKey 对和它的子项作出的改动实际写入磁?
RegGetKeySecurity 获取与一个注册表Ҏ(gu)关的安全信息
RegLoadKey 从以前用RegSaveKey函数创徏的一个文仉装蝲注册表信?
RegNotifyChangeKeyValue 注册表项或它的Q何一个子发生变化时Q用q个函数提供一U通知机制
RegOpenKey 打开一个现有的注册表项
RegOpenKeyEx 打开一个现有的V在win32下推荐用这个函?
RegQueryInfoKey 获取与一个项有关的信?
RegQueryValue 取得指定Ҏ(gu)子项的默认(未命名)(j)?
RegQueryValueEx 获取一个项的设|?
RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息;q创Z个备份,在其中包含当前注册表信息
RegRestoreKey 从一个磁盘文件恢复注册表信息
RegSaveKey 一个项以及(qing)它的所有子w保存C个磁盘文?
RegSetKeySecurity 讄指定的安全Ҏ(gu)?
RegSetValue 讄指定Ҏ(gu)子项的默认?
RegSetValueEx 讄指定的?
RegUnLoadKey 卸蝲指定的项以及(qing)它的所有子?
RemoveDirectory 删除指定目录
SearchPath 查找指定文g
SetCurrentDirectory 讄当前目录
SetEndOfFile 针对一个打开的文Ӟ当前文件位|设为文件末?
SetFileAttributes 讄文g属?
SetFilePointer 在一个文件中讄当前的读写位|?
SetFileTime 讄文g的创建、访问及(qing)上次修改旉
SetHandleCount q个函数不必在win32下用;即使用Q也不会(x)有Q何效?
SetVolumeLabel 讄一个磁盘的hQLabelQ?
SystemTimeToFileTime Ҏ(gu)一个FILETIMEl构的内容,载入一个SYSTEMTIMEl构
UnlockFile 解除对一个文件的锁定
UnlockFileEx 解除对一个文件的锁定
UnmapViewOfFile 在当前应用程序的内存地址I间解除对一个文件映对象的映射
VerFindFile 用这个函数决定一个文件应安装到哪?
VerInstallFile 用这个函数安装一个文?
VerLanguageName q个函数能根?6位语a代码获取一U语a的名U?
VerQueryValue q个函数用于从版本资源中获取信息
WriteFile 数据写入一个文?
WriteFileEx 与WriteFilecMQ只是它只能用于异步写操作,q包括了(jin)一个完整的回调
WritePrivateProfileSection Z个初始化文gQ?iniQ中指定的小节设|所有项名和?
WritePrivateProfileString 在初始化文g指定节内设|一个字?
WriteProfileSection 为Win.ini初始化文件中一个指定的节讄所有项名和?
WriteProfileString 在Win.ini初始化文件指定小节内讄一个字?
4. API之打印函?
AbortDoc 取消一份文的打印
AbortPrinter 删除与一台打印机兌在一L(fng)~冲文g
AddForm 为打印机的表单列表添加一个新表单
AddJob 用于获取一个有效的路径名,以便用它Z业创Z个后台打印文件。它也会(x)Z业分配一个作业编?
AddMonitor 为系l添加一个打印机监视?
AddPort 启动"d端口"对话框,允许用户在系l可用端口列表中加入一个新端口
AddPrinter 在系l中d一台新打印?
AddPrinterConnection q接指定的打印机
AddPrinterDriver 为指定的pȝd一个打印驱动程?
AddPrintProcessor 为指定的pȝd一个打印处理器
AddPrintProvidor 为系l添加一个打C应商
AdvancedDocumentProperties 启动打印机文档设|对话框
ClosePrinter 关闭一个打开的打印机对象
ConfigurePort 针对指定的端口,启动一个端口配|对话框
ConnectToPrinterDlg 启动q接打印机对话框Q用它同讉K|络的打印机q接
DeleteForm 从打印机可用表单列表中删除一个表?
DeleteMonitor 删除指定的打印监视器
DeletePort 启动"删除端口"对话框,允许用户从当前系l删除一个端?
DeletePrinter 指定的打印机标志ؓ(f)从系l中删除
DeletePrinterConnection 删除与指定打印机的连?
DeletePrinterDriver 从系l删除一个打印机驱动E序
DeletePrintProcessor 从指定系l删除一个打印处理器
DeletePrintProvidor 从系l中删除一个打C应商
DeviceCapabilities 利用q个函数可获得与一个设备的能力有关的信?
DocumentProperties 打印机配|控制函?
EndDocAPI l束一个成功的打印作业
EndDocPrinter 在后台打印程序的U别指定一个文的l束
EndPage 用这个函数完成一个页面的打印Qƈ准备讑֤场景Q以便打C一个页
EndPagePrinter 指定一个页在打C业中的结?
EnumForms 枚D一台打印机可用的表?
EnumJobs 枚D打印队列中的作业
EnumMonitors 枚D可用的打印监视器
EnumPorts 枚D一个系l可用的端口
EnumPrinterDrivers 枚D指定pȝ中已安装的打印机驱动E序
EnumPrinters 枚Dpȝ中安装的打印?
EnumPrintProcessorDatatypes 枚D׃个打印处理器支持的数据类?
EnumPrintProcessors 枚Dpȝ中可用的打印处理?
Escape 讑֤控制函数
FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
FindFirstPrinterChangeNotification 创徏一个新的改变通告对象Q以便我们注意打印机状态的各种变化
FindNextPrinterChangeNotification 用这个函数判断触发一ơ打印机改变通告信号的原?
FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区
GetForm 取得与指定表单有关的信息
GetJob 获取与指定作业有关的信息
GetPrinter 取得与指定打印机有关的信?
GetPrinterData 为打印机讄注册表配|信?
GetPrinterDriver 针对指定的打印机Q获取与打印机驱动程序有关的信息
GetPrinterDriverDirectory 判断指定pȝ中包含了(jin)打印机驱动程序的目录是什?
GetPrintProcessorDirectory 判断指定pȝ中包含了(jin)打印机处理器驱动E序?qing)文件的目?
OpenPrinter 打开指定的打印机Qƈ获取打印机的句柄
PrinterMessageBox 在拥有指定打C业的pȝ上显CZ个打印机出错消息?
PrinterProperties 启动打印机属性对话框Q以便对打印行配|?
ReadPrinter 从打印机d数据
ResetDC 重设一个设备场?
ResetPrinter 改变指定打印机的默认数据cd?qing)文档设|?
ScheduleJob 提交一个要打印的作?
SetAbortProc 为Windows指定取消函数的地址
SetForm 为指定的表单讄信息
SetJob 对一个打C业的状态进行控?
SetPrinter 对一台打印机的状态进行控?
SetPrinterData 讄打印机的注册表配|信?
StartDoc 开始一个打C?
StartDocPrinter 在后台打印的U别启动一个新文
StartPage 打印一个新前要先调用q个函数
StartPagePrinter 在打C业中指定一个新늚开?
WritePrinter 发送目录中的数据写入打印机
5. API之文本和字体函数
AddFontResource 在Windowspȝ中添加一U字体资?
CreateFont 用指定的属性创ZU逻辑字体
CreateFontIndirect 用指定的属性创ZU逻辑字体
CreateScalableFontResource ZUTureType字体创徏一个资源文Ӟ以便能用API函数AddFontResource其加入Windowspȝ
DrawText 文本描l到指定的矩形中
DrawTextEx 与DrawText怼Q只是加入了(jin)更多的功?
EnumFontFamilies 列D指定讑֤可用的字?
EnumFontFamiliesEx 列D指定讑֤可用的字?
EnumFonts 列D指定讑֤可用的字?
ExtTextOut l过扩展的文本描l函数。也请参考SetTextAlign函数
GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时Q本函数可判断纵横比大小
GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小
GetCharABCWidthsFloat 查询一U字体中一个或多个字符的A-B-C寸
GetCharacterPlacement 该函数用于了(jin)解如何用一个给定的字符昄一个字?
GetCharWidth 调查字体中一个或多个字符的宽?
GetFontData 接收一U可~放字体文g的数?
GetFontLanguageInfo q回目前选入指定讑֤场景中的字体的信?
GetGlyphOutline 取得TureType字体中构成一个字W的曲线信息
GetKerningPairs 取得指定字体的字距信?
GetOutlineTextMetrics 接收与TureType字体内部特征有关的详l信?
GetRasterizerCaps ?jin)解pȝ是否有能力支持可~放的字?
GetTabbedTextExtent 判断一个字串占据的范围Q同时考虑制表站扩充的因素
GetTextAlign 接收一个设备场景当前的文本寚w标志
GetTextCharacterExtra 判断额外字符间距的当前?
GetTextCharset 接收当前选入指定讑֤场景的字体的字符集标识符
GetTextCharsetInfo 获取与当前选定字体的字W集有关的详l信?
GetTextColor 判断当前字体颜色。通常也称?前景?
GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数l装载每个字W的范围信息
GetTextExtentPoint 判断一个字串的大小Q范_(d)(j)
GetTextFace 获取一U字体的字样?
GetTextMetrics 获取与选入一U设备场景的物理字体有关的信?
GrayString 描绘一个以灰色昄的字丌Ӏ通常由Windows用于标识止状?
PolyTextOut 描绘一pd字串
RemoveFontResource 从Windowspȝ中删除一U字体资?
SetMapperFlags Windows对字体进行映时Q可用该函数选择与目标设备的U|比相W的光栅字体
SetTextAlign 讄文本寚w方式Qƈ指定在文本输?gu)E中使用讑֤场景的当前位|?
SetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距
SetTextColor 讄当前文本颜色。这U颜色也UCؓ(f)"前景?
SetTextJustification 通过指定一个文本行应占据的额外I间Q可用这个函数对文本q行两端寚w处理
TabbedTextOut 支持制表站的一个文本描l函?
TextOut 文本l图函数
6. API之菜单函?
AppendMenu 在指定的菜单里添加一个菜单项
CheckMenuItem 复选或撤消复选指定的菜单条目
CheckMenuRadioItem 指定一个菜单条目被复选成"单?目
CreateMenu 创徏新菜?
CreatePopupMenu 创徏一个空的弹出式菜单
DeleteMenu 删除指定的菜单条?
DestroyMenu 删除指定的菜?
DrawMenuBar 为指定的H口重画菜单
EnableMenuItem 允许或禁止指定的菜单条目
GetMenu 取得H口中一个菜单的句柄
GetMenuCheckMarkDimensions q回一个菜单复选符的大?
GetMenuContextHelpId 取得一个菜单的帮助场景ID
GetMenuDefaultItem 判断菜单中的哪个条目是默认条?
GetMenuItemCount q回菜单中条目(菜单)(j)的数?
GetMenuItemID q回位于菜单中指定位|处的条目的菜单ID
GetMenuItemInfo 取得Q接Ӟ(j)与一个菜单条目有关的特定信息
GetMenuItemRect 在一个矩形中装蝲指定菜单条目的屏q坐标信?
GetMenuState 取得与指定菜单条目状态有关的信息
GetMenuString 取得指定菜单条目的字?
GetSubMenu 取得一个弹出式菜单的句柄,它位于菜单中指定的位|?
GetSystemMenu 取得指定H口的系l菜单的句柄
HiliteMenuItem 控制菜单条目的加亮显C状?
InsertMenu 在菜单的指定位置处插入一个菜单条目,q根据需要将其他条目向下Ud
InsertMenuItem 插入一个新菜单条目
IsMenu 判断指定的句柄是否ؓ(f)一个菜单的句柄
LoadMenu 从指定的模块或应用程序实例中载入一个菜?
LoadMenuIndirect 载入一个菜?
MenuItemFromPoint 判断哪个菜单条目包含?jin)屏q上一个指定的?
ModifyMenu 改变菜单条目
RemoveMenu 删除指定的菜单条?
SetMenu 讄H口菜单
SetMenuContextHelpId 讄一个菜单的帮助场景ID
SetMenuDefaultItem 一个菜单条目设为默认条?
SetMenuItemBitmaps 讄一q特定位图,令其在指定的菜单条目中用,代替标准的复选符P√)(j)
SetMenuItemInfo Z个菜单条目设|指定的信息
TrackPopupMenu 在屏q的L地方昄一个弹出式菜单
TrackPopupMenuEx 与TrackPopupMenu怼Q只是它提供?jin)额外的功?
7. API之位图、图标和光栅q算函数
BitBlt 一q位图从一个设备场景复制到另一?
CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程?
CopyImage 复制位图、图标或指针Q同时在复制q程中进行一些{换工?
CreateBitmap 按照规定的格式创Zq与讑֤有关位图
CreateBitmapIndirect 创徏一q与讑֤有关位图
CreateCompatibleBitmap 创徏一q与讑֤有关位图Q它与指定的讑֤场景兼容
CreateCursor 创徏一个鼠标指?
CreateDIBitmap Ҏ(gu)一q与讑֤无关的位囑ֈZq与讑֤有关的位?
CreateDIBSection 创徏一个DIBSection
CreateIcon 创徏一个图?
CreateIconIndirect 创徏一个图?
DestroyCursor 清除指定的鼠标指针,q攑֮占用的所有系l资?
DestroyIcon 清除图标
DrawIcon 在指定的位置M个图?
DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比Q这个函数提供了(jin)更多的功?
ExtractAssociatedIcon 判断一个可执行E序或DLL中是否存在图标,或是否有图标与系l注册表中指定的文g存在兌q提取之
ExtractIcon 判断一个可执行文g或DLL中是否有图标存在Qƈ其提取出来
GetBitmapBits 来自位囄二进制位复制C个缓冲区
GetBitmapDimensionEx 取得一q位囄宽度和高?
GetDIBColorTable 从选入讑֤场景的DIBSection中取得颜色表信息
GetDIBits 来自一q位囄二进制位复制Cq与讑֤无关的位N
GetIconInfo 取得与图标有关的信息
GetStretchBltMode 判断StretchBlt ?StretchDIBits函数采用的~模?
LoadBitmap 从指定的模块或应用程序实例中载入一q位?
LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指?
LoadCursorFromFile 在一个指针文件或一个动L针文件的基础上创Z个指?
LoadIcon 从指定的模块或应用程序实例中载入一个图?
LoadImage 载入一个位图、图标或指针
MaskBlt 执行复杂的图象传输,同时q行掩模QMASKQ处?
PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的讑֤场景
PlgBlt 复制一q位图,同时其转换成一个^行四边Ş。利用它可对位图q行旋{处理
SetBitmapBits 来自缓冲区的二q制位复制到一q位?
SetBitmapDimensionEx 讄一q位囄宽度。以一毫米的十分之一为单?
SetDIBColorTable 讄选入讑֤场景的一个DIBSection的颜色表信息
SetDIBits 来自与讑֤无关位图的二q制位复制到一q与讑֤有关的位N
SetDIBitsToDevice 一q与讑֤无关位图的全部或部分数据直接复制C个设?
SetStretchBltMode 指定StretchBlt ?StretchDIBits函数的~模?
StretchBlt 一q位图从一个设备场景复制到另一?
StretchDIBits 一q与讑֤无关位图的全部或部分数据直接复制到指定的讑֤场景
8. API之绘囑և?
AbortPath 抛弃选入指定讑֤场景中的所有\径。也取消目前正在q行的Q何\径的创徏工作
AngleArc 用一个连接弧M条线
Arc M个圆?
BeginPath 启动一个\径分?
CancelDC 取消另一个线E里的长旉l图操作
Chord M个u
CloseEnhMetaFile 关闭指定的增强型囑օ文g讑֤场景Qƈ新建的囑օ文gq回一个句?
CloseFigure 描绘C个\径时Q关闭当前打开的图?
CloseMetaFile 关闭指定的图元文件设备场景,q向新徏的图元文件返回一个句?
CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拯Q?
CopyMetaFile 制作指定Q标准)(j)囑օ文g的一个副?
CreateBrushIndirect 在一个LOGBRUSH数据l构的基上创Z个刷?
CreateDIBPatternBrush 用一q与讑֤无关的位囑ֈZ个刷子,以便指定刷子样式Q图案)(j)
CreateEnhMetaFile 创徏一个增强型的图元文件设备场?
CreateHatchBrush 创徏带有阴媄(jing)图案的一个刷?
CreateMetaFile 创徏一个图元文件设备场?
CreatePatternBrush 用指定了(jin)刷子图案的一q位囑ֈZ个刷?
CreatePen 用指定的样式、宽度和颜色创徏一个画W?
CreatePenIndirect Ҏ(gu)指定的LOGPENl构创徏一个画W?
CreateSolidBrush 用纯色创Z个刷?
DeleteEnhMetaFile 删除指定的增强型囑օ文g
DeleteMetaFile 删除指定的图元文?
DeleteObject 删除GDI对象Q对象用的所有系l资源都?x)被释?
DrawEdge 用指定的样式描绘一个矩形的Ҏ(gu)
DrawEscape 换码QEscapeQ函数将数据直接发至昄讑֤驱动E序
DrawFocusRect M个焦点矩?
DrawFrameControl 描绘一个标准控?
DrawState Zq图象或l图操作应用各式各样的效?
Ellipse 描绘一个椭圆,由指定的矩Ş围绕
EndPath 停止定义一个\?
EnumEnhMetaFile 针对一个增强型囑օ文gQ列丑օ中单独的囑օ文g记录
EnumMetaFile Z个标准的windows囑օ文g枚D单独的图元文件记?
EnumObjects 枚D可随同指定设备场景用的ȝ和刷?
ExtCreatePen 创徏一个扩展画W(装饰或几何)(j)
ExtFloodFill 在指定的讑֤场景里,用当前选择的刷子填充一个区?
FillPath 关闭路径中Q何打开的图形,q用当前刷子填充
FillRect 用指定的刷子填充一个矩?
FlattenPath 一个\径中的所有曲UK转换成线D?
FloodFill 用当前选定的刷子在指定的设备场景中填充一个区?
FrameRect 用指定的刷子围绕一个矩形画一个边?
GdiComment 为指定的增强型图元文件设备场景添加一条注释信?
GdiFlush 执行M未决的绘图操?
GdiGetBatchLimit 判断有多个GDIl图命o(h)位于队列?
GdiSetBatchLimit 指定有多个GDIl图命o(h)能够q入队列
GetArcDirection d弧的时候,判断当前采用的绘图方?
GetBkColor 取得指定讑֤场景当前的背景颜?
GetBkMode 针对指定的设备场景,取得当前的背景填充模?
GetBrushOrgEx 判断指定讑֤场景中当前选定刷子L(fng)
GetCurrentObject 获得指定cd的当前选定对象
GetCurrentPositionEx 在指定的讑֤场景中取得当前的ȝ位置
GetEnhMetaFile 取得盘文g中包含的一个增强型囑օ文g的图元文件句?
GetEnhMetaFileBits 指定的增强型图元文件复制到一个内存缓冲区?
GetEnhMetaFileDescription q回对一个增强型囑օ文g的说?
GetEnhMetaFileHeader 取得增强型图元文件的囑օ文g?
GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板
GetMetaFile 取得包含在一个磁盘文件中的图元文件的囑օ文g句柄
GetMetaFileBitsEx 指定的囑օ文g复制C个内存缓冲区
GetMiterLimit 取得讑֤场景的斜率限ӞMiterQ设|?
GetNearestColor Ҏ(gu)讑֤的显C力,取得与指定颜色最接近的一U纯?
GetObjectAPI 取得Ҏ(gu)定对象进行说明的一个结?
GetObjectType 判断由指定句柄引用的GDI对象的类?
GetPath 取得对当前\径进行定义的一pd数据
GetPixel 在指定的讑֤场景中取得一个像素的RGB?
GetPolyFillMode 针对指定的设备场景,获得多边形填充模?
GetROP2 针对指定的设备场景,取得当前的绘图模?
GetStockObject 取得一个固有对象(StockQ?
GetSysColorBrush ZQ何一U标准系l颜色取得一个刷?
GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据Q将一个增强型囑օ文g转换成标准windows囑օ文g
InvertRect 通过反{每个像素的|从而反转一个设备场景中指定的矩?
LineDDA 枚D指定U段中的所有点
LineTo 用当前画W画一条线Q从当前位置q到一个指定的?
MoveToEx 为指定的讑֤场景指定一个新的当前画W位|?
PaintDesk 在指定的讑֤场景中描l桌面墙U图?
PathToRegion 当前选定的\径{换到一个区域里
Pie M个饼?
PlayEnhMetaFile 在指定的讑֤场景中画一个增强型囑օ文g
PlayEnhMetaFileRecord 回放单独一条增强型囑օ文g记录
PlayMetaFile 在指定的讑֤场景中回放一个图元文?
PlayMetaFileRecord 回放来自囑օ文g的单条记?
PolyBezier 描绘一条或多条贝塞?dng)(BezierQ曲U?
PolyDraw 描绘一条复杂的曲线Q由U段?qing)贝塞尔曲线l成
Polygon 描绘一个多边Ş
Polyline 用当前画W描l一pdU段
PolyPolygon 用当前选定ȝ描绘两个或多个多边Ş
PolyPolyline 用当前选定ȝ描绘两个或多个多边Ş
Rectangle 用当前选定的画W描l矩形,q用当前选定的刷子填?
RoundRect 用当前选定的画W画一个圆角矩形,q用当前选定的刷子在其中填充
SelectClipPath 设备场景当前的路径合ƈ到剪切区域里
SelectObject 为当前设备场景选择囑Ş对象
SetArcDirection 讄圆弧的描l方?
SetBkColor 为指定的讑֤场景讄背景颜色
SetBkMode 指定阴媄(jing)刷子、虚U画W以?qing)字W中的空隙的填充方式
SetBrushOrgEx 为指定的讑֤场景讄当前选定刷子的v?
SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创徏一个增强型囑օ文g
SetMetaFileBitsEx 用包含在指定内存~冲区内的数据结构创Z个图元文?
SetMiterLimit 讄讑֤场景当前的斜率限?
SetPixel 在指定的讑֤场景中设|一个像素的RGB?
SetPixelV 在指定的讑֤场景中设|一个像素的RGB?
SetPolyFillMode 讄多边形的填充模式
SetROP2 讄指定讑֤场景的绘图模式。与vb的DrawMode属性完全一?
SetWinMetaFileBits 一个标准Windows囑օ文g转换成增强型囑օ文g
StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区?
StrokePath 用当前画W描l一个\径的轮廓。打开的图形不?x)被q个函数关闭
UnrealizeObject 一个刷子对象选入讑֤场景之前Q如刷子的v点准备用SetBrushOrgEx修改Q则必须先调用本函数
WidenPath Ҏ(gu)选定ȝ的宽度,重新定义当前选定的\?
9. API之设备场景函?
CombineRgn 两个区域组合ؓ(f)一个新区域
CombineTransform 驱动世界转换。它相当于依?rn)序q行两次转换
CreateCompatibleDC 创徏一个与特定讑֤场景一致的内存讑֤场景
CreateDC Z门设备创备场?
CreateEllipticRgn 创徏一个椭?
CreateEllipticRgnIndirect 创徏一个内切于特定矩Ş的椭圆区?
CreateIC Z用设备创Z个信息场?
CreatePolygonRgn 创徏一个由一pd点围成的区域
CreatePolyPolygonRgn 创徏由多个多边Ş构成的区域。每个多边Ş都应是封闭的
CreateRectRgn 创徏一个矩形区?
CreateRectRgnIndirect 创徏一个矩形区?
CreateRoundRectRgn 创徏一个圆角矩?
DeleteDC 删除专用讑֤场景或信息场景,释放所有相关窗口资?
DPtoLP 点阵从讑֤坐标转换C用设备场景逻辑坐标
EqualRgn 定两个区域是否相等
ExcludeClipRect 从专用设备场景的剪裁ZL一个矩形区。矩形内不能q行l图
ExcludeUpdateRgn 从专用设备场景剪裁区L指定H口的刷新区?
ExtCreateRegion Ҏ(gu)世界转换修改区域
ExtSelectClipRgn 指定区域组合到讑֤场景的当前剪裁区
FillRgn 用指定刷子填充指定区?
FrameRgn 用指定刷子围l指定区域画一个外?
GetBoundsRect 获取指定讑֤场景的边界矩?
GetClipBox 获取完全包含指定讑֤场景剪裁区的最矩?
GetClipRgn 获取讑֤场景当前剪裁?
GetDC 获取指定H口的设备场?
GetDCEx 为指定窗口获取设备场景。相比GetDCQ本函数提供?jin)更多的选项
GetDCOrgEx 获取指定讑֤场景L(fng)位置Q以屏幕坐标表示Q?
GetDeviceCaps Ҏ(gu)指定讑֤场景代表的设备的功能q回信息
GetGraphicsMode 定是否允许增强囑Ş模式Q世界{换)(j)
GetMapMode 为特定设备场景调入映象模?
GetRegionData 装入描述一个区域信息的RgnDatal构或缓冲区
GetRgnBox 获取完全包含指定区域的最矩?
GetUpdateRgn 定指定H口的刷新区域。该区域当前无效Q需要刷?
GetViewportExtEx 获取讑֤场景视口QviewportQ范?
GetViewportOrgEx 获取讑֤场景视口L(fng)
GetWindowDC 获取整个H口Q包括边框、滚动条、标题栏、菜单等Q的讑֤场景
GetWindowExtEx 获取指定讑֤场景的窗口范?
GetWindowOrgEx 获取指定讑֤场景的逻辑H口的v?
GetWindowRgn 获取H口区域
GetWorldTransform 如果有世界{换,备场景获取当前世界{?
IntersectClipRect 为指定设备定义一个新的剪裁区
InvalidateRgn 使窗口指定区域不zdQƈ它加入H口h区,使之可随后被重画
InvertRgn 通过颠倒每个像素值反转设备场景指定区?
LPtoDP 点阵从指定讑֤场景逻辑坐标转换备坐?
ModifyWorldTransform Ҏ(gu)指定的模式修改世界{?
OffsetClipRgn 按指定量q移讑֤场景剪裁?
OffsetRgn 按指定偏U量q移指定区域
OffsetViewportOrgEx q移讑֤场景视口区域
OffsetWindowOrgEx q移指定讑֤场景H口L(fng)
PaintRgn 用当前刷子背景色填充指定区域
PtInRegion 定Ҏ(gu)否在指定区域?
PtVisible 定指定Ҏ(gu)否可见(卻IҎ(gu)否在讑֤场景剪裁区内Q?
RectInRegion 定矩Ş是否有部分在指定区域?
RectVisible 定指定矩Ş是否有部分可见(是否在设备场景剪裁区内)(j)
ReleaseDC 释放p用GetDC或GetWindowDC函数获取的指定设备场?
RestoreDC 从设备场景堆栈恢复一个原先保存的讑֤场景
SaveDC 指定设备场景状态保存到Windows讑֤场景堆栈
ScaleViewportExtEx ~放讑֤场景视口的范?
ScaleWindowExtEx ~放指定讑֤场景H口范围
ScrollDC 在窗口(p备场景代表)(j)中水q_Q或Q垂直滚动矩?
SelectClipRgn 为指定设备场景选择新的剪裁?
SetBoundsRect 讄指定讑֤场景的边界矩?
SetGraphicsMode 允许或禁止增强图形模式,以提供某些支持(包括世界转换Q?
SetMapMode 讄指定讑֤场景的映模?
SetRectRgn 讄区域为指定的矩Ş
SetViewportExtEx 讄讑֤场景视口范围
SetViewportOrgEx 讄讑֤场景视口L(fng)
SetWindowExtEx 讄指定讑֤场景H口范围
SetWindowOrgEx 讄指定讑֤场景H口L(fng)
SetWindowRgn 讄H口区域
SetWorldTransform 讄世界转换
ValidateRgn Ȁzȝ口中指定区域Q把它从h区移?
WindowFromDC 取回与某一讑֤场景相关的窗口的句柄
10. API之硬件与pȝ函数
ActivateKeyboardLayout ȀzM个新的键盘布局。键盘布局定义?jin)按键在一U物理性键盘上的位|与含义
Beep 用于生成单的声音
CharToOem 一个字串从ANSI字符集{换到OEM字符?
ClipCursor 指针限制到指定区域
ConvertDefaultLocale 一个特D的地方标识W{换成真实的地方ID
CreateCaret Ҏ(gu)指定的信息创Z个插入符Q光标)(j)Qƈ它选定为指定窗口的默认插入W?
DestroyCaret 清除Q破坏)(j)一个插入符
EnumCalendarInfo 枚D在指?地方"环境中可用的日历信息
EnumDateFormats 列D指定?当地"讄中可用的ѝ短日期格式
EnumSystemCodePages 枚Dpȝ中已安装或支持的代码?
EnumSystemLocales 枚Dpȝ已经安装或提供支持的"地方"讄
EnumTimeFormats 枚D一个指定的地方适用的时间格?
ExitWindowsEx 退出windowsQƈ用特定的选项重新启动
ExpandEnvironmentStrings 扩充环境字串
FreeEnvironmentStrings 译指定的环境字串块
GetACP 判断目前正在生效的ANSI代码?
GetAsyncKeyState 判断函数调用时指定虚拟键的状?
GetCaretBlinkTime 判断插入W光标的闪烁频率
GetCaretPos 判断插入W的当前位置
GetClipCursor 取得一个矩形,用于描述目前为鼠标指针规定的剪切区域
GetCommandLine 获得指向当前命o(h)行缓冲区的一个指?
GetComputerName 取得q台计算机的名称
GetCPInfo 取得与指定代码页有关的信?
GetCurrencyFormat 针对指定?地方"讄Q根据货币格式格式化一个数?
GetCursor 获取目前选择的鼠标指针的句柄
GetCursorPos 获取鼠标指针的当前位|?
GetDateFormat 针对指定?当地"格式Q对一个系l日期进行格式化
GetDoubleClickTime 判断q箋两次鼠标单击之间?x)被处理成双M件的间隔旉
GetEnvironmentStrings 为包含了(jin)当前环境字串讄的一个内存块分配和返回一个句?
GetEnvironmentVariable 取得一个环境变量的?
GetInputState 判断是否存在M待决Q等待处理)(j)的鼠标或键盘事g
GetKBCodePage 由GetOEMCP取代Q两者功能完全相?
GetKeyboardLayout 取得一个句柄,描述指定应用E序的键盘布局
GetKeyboardLayoutList 获得pȝ适用的所有键盘布局的一个列?
GetKeyboardLayoutName 取得当前zd键盘布局的名U?
GetKeyboardState 取得键盘上每个虚拟键当前的状?
GetKeyboardType ?jin)解与正在用的键盘有关的信?
GetKeyNameText 在给出扫描码的前提下Q判断键?
GetKeyState 针对已处理过的按键,在最q一ơ输入信息时Q判断指定虚拟键的状?
GetLastError 针对之前调用的api函数Q用q个函数取得扩展错误信息
GetLocaleInfo 取得与指?地方"有关的信?
GetLocalTime 取得本地日期和时?
GetNumberFormat 针对指定?地方"Q按特定的格式格式化一个数?
GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码?
GetQueueStatus 判断应用E序消息队列中待冻I{待处理Q的消息cd
GetSysColor 判断指定windows昄对象的颜?
GetSystemDefaultLangID 取得pȝ的默认语aID
GetSystemDefaultLCID 取得当前的默认系l?地方"
GetSystemInfo 取得与底层硬件^台有关的信息
GetSystemMetrics q回与windows环境有关的信?
GetSystemPowerStatus 获得与当前系l电(sh)源状态有关的信息
GetSystemTime 取得当前pȝ旉Q这个时间采用的?协同世界旉"Q即UTCQ也叫做GMTQ格?
GetSystemTimeAdjustment 使内部系l时钟与一个外部的旉信号源同?
GetThreadLocale 取得当前U程的地方ID
GetTickCount 用于获取自windows启动以来l历的时间长度(毫秒Q?
GetTimeFormat 针对当前指定?地方"Q按特定的格式格式化一个系l时?
GetTimeZoneInformation 取得与系l时|有关的信息
GetUserDefaultLangID 为当前用户取得默认语aID
GetUserDefaultLCID 取得当前用户的默?地方"讄
GetUserName 取得当前用户的名?
GetVersion 判断当前q行的Windows和DOS版本
GetVersionEx 取得与^台和操作pȝ有关的版本信?
HideCaret 在指定的H口隐藏插入W(光标Q?
IsValidCodePage 判断一个代码页是否有效
IsValidLocale 判断地方标识W是否有?
keybd_event q个函数模拟?jin)键盘行?
LoadKeyboardLayout 载入一个键盘布局
MapVirtualKey Ҏ(gu)指定的映类型,执行不同的扫描码和字W{?
MapVirtualKeyEx Ҏ(gu)指定的映类型,执行不同的扫描码和字W{?
MessageBeep 播放一个系l声韟뀂系l声音的分配Ҏ(gu)是在控制面板里决定的
mouse_event 模拟一ơ鼠标事?
OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状?
OemToChar OEM字符集的一个字串{换到ANSI字符?
SetCaretBlinkTime 指定插入W(光标Q的闪烁频率
SetCaretPos 指定插入W的位置
SetComputerName 讄新的计算机名
SetCursor 指定的鼠标指针设ؓ(f)当前指针
SetCursorPos 讄指针的位|?
SetDoubleClickTime 讄q箋两次鼠标单击之间能ɾpȝ认ؓ(f)是双M件的间隔旉
SetEnvironmentVariable 一个环境变量设为指定的?
SetKeyboardState 讄每个虚拟键当前在键盘上的状?
SetLocaleInfo 改变用户"地方"讄信息
SetLocalTime 讄当前地方旉
SetSysColors 讄指定H口昄对象的颜?
SetSystemCursor 改变M一个标准系l指?
SetSystemTime 讄当前pȝ旉
SetSystemTimeAdjustment 定时d一个校准g内部pȝ旉与一个外部的旉信号源同?
SetThreadLocale 为当前线E设|地?
SetTimeZoneInformation 讄pȝ时区信息
ShowCaret 在指定的H口里显C插入符Q光标)(j)
ShowCursor 控制鼠标指针的可视?
SwapMouseButton 军_是否互换鼠标左右键的功能
SystemParametersInfo 获取和设|数量众多的windowspȝ参数
SystemTimeToTzSpecificLocalTime 系l时间{换成地方旉
ToAscii Ҏ(gu)当前的扫描码和键盘信息,一个虚拟键转换成ASCII字符
ToUnicode Ҏ(gu)当前的扫描码和键盘信息,一个虚拟键转换成Unicode字符
UnloadKeyboardLayout 卸蝲指定的键盘布局
VkKeyScan 针对Windows字符集中一个ASCII字符Q判断虚拟键码和Shift键的状?
11. API之进E和U程函数
CancelWaitableTimer q个函数用于取消一个可以等待下ȝ计时器操?
CallNamedPipe q个函数׃个希望通过道通信的一个客戯E调?
ConnectNamedPipe 指示一台服务器{待下去Q直臛_h同一个命名管道连?
CreateEvent 创徏一个事件对?
CreateMailslot 创徏一个邮路。返回的句柄由邮路服务器使用Q收件hQ?
CreateMutex 创徏一个互斥体QMUTEXQ?
CreateNamedPipe 创徏一个命名管道。返回的句柄q道的服务器端使用
CreatePipe 创徏一个匿名管?
CreateProcess 创徏一个新q程Q比如执行一个程序)(j)
CreateSemaphore 创徏一个新的信h
CreateWaitableTimer 创徏一个可{待的计时器对象
DisconnectNamedPipe 断开一个客户与一个命名管道的q接
DuplicateHandle 在指Z个现有系l对象当前句柄的情况下,为那个对象创Z个新句柄
ExitProcess 中止一个进E?
FindCloseChangeNotification 关闭一个改动通知对象
FindExecutable 查找与一个指定文件关联在一L(fng)E序的文件名
FindFirstChangeNotification 创徏一个文仉知对象。该对象用于监视文gpȝ发生的变?
FindNextChangeNotification 重设一个文件改变通知对象Qo(h)其l监视下一ơ变?
FreeLibrary 释放指定的动态链接库
GetCurrentProcess 获取当前q程的一个伪句柄
GetCurrentProcessId 获取当前q程一个唯一的标识符
GetCurrentThread 获取当前U程的一个伪句柄
GetCurrentThreadId 获取当前U程一个唯一的线E标识符
GetExitCodeProces 获取一个已中断q程的退Z?
GetExitCodeThread 获取一个已中止U程的退Z?
GetHandleInformation 获取与一个系l对象句柄有关的信息
GetMailslotInfo 获取与一个邮路有关的信息
GetModuleFileName 获取一个已装蝲模板的完整\径名U?
GetModuleHandle 获取一个应用程序或动态链接库的模块句?
GetPriorityClass 获取特定q程的优先?
GetProcessShutdownParameters 调查pȝ关闭时一个指定的q程相对于其它进E的关闭早迟情况
GetProcessTimes 获取与一个进E的l过旉有关的信?
GetProcessWorkingSetSize ?jin)解一个应用程序在q行q程中实际向它交付了(jin)多大定w的内?
GetSartupInfo 获取一个进E的启动信息
GetThreadPriority 获取特定U程的优先?
GetTheardTimes 获取与一个线E的l过旉有关的信?
GetWindowThreadProcessId 获取与指定窗口关联在一L(fng)一个进E和U程标识W?
LoadLibrary 载入指定的动态链接库Qƈ它映射到当前进E用的地址I间
LoadLibraryEx 装蝲指定的动态链接库Qƈ为当前进E把它映到地址I间
LoadModule 载入一个Windows应用E序Qƈ在指定的环境中运?
MsgWaitForMultipleObjects {侯单个对象或一pd对象发出信号。如q回条g已经满Q则立即q回
SetPriorityClass 讄一个进E的优先U别
SetProcessShutdownParameters 在系l关闭期_(d)为指定进E设|他相对于其它程序的关闭序
SetProcessWorkingSetSize 讄操作pȝ实际划分l进E用的内存定w
SetThreadPriority 讑֮U程的优先?
ShellExecute 查找与指定文件关联在一L(fng)E序的文件名
TerminateProcess l束一个进E?
WinExec q行指定的程?
12. API之控件与消息函数
AdjustWindowRect l定一U窗口样式,计算获得目标客户区矩形所需的窗口大?
AnyPopup 判断屏幕上是否存在Q何弹出式H口
ArrangeIconicWindows 排列一个父H口的最化子窗?
AttachThreadInput q接U程输入函数
BeginDeferWindowPos 启动构徏一pd新窗口位|的q程
BringWindowToTop 指定的H口带至H口列表剙
CascadeWindows 以层叠方式排列窗?
ChildWindowFromPoint q回父窗口中包含?jin)指定点的第一个子H口的句?
ClientToScreen 判断H口内以客户区坐标表C的一个点的屏q坐?
CloseWindow 最化指定的窗?
CopyRect 矩Ş内容复制
DeferWindowPos 该函Cؓ(f)特定的窗口指定一个新H口位置
DestroyWindow 清除指定的窗口以?qing)它的所有子H口
DrawAnimatedRects 描绘一pd动态矩?
EnableWindow 指定的窗口里允许或禁止所有鼠标及(qing)键盘输入
EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置?qing)状?
EnumChildWindows 为指定的父窗口枚丑֭H口
EnumThreadWindows 枚D与指定Q务相关的H口
EnumWindows 枚DH口列表中的所有父H口
EqualRect 判断两个矩Şl构是否相同
FindWindow LH口列表中第一个符合指定条件的H口
FindWindowEx 在窗口列表中L与指定条件相W的W一个子H口
FlashWindow 闪烁昄指定H口
GetActiveWindow 获得zdH口的句?
GetCapture 获得一个窗口的句柄Q这个窗口位于当前输入线E,且拥有鼠标捕P鼠标zd由它接收Q?
GetClassInfo 取得WNDCLASSl构Q或WNDCLASSEXl构Q的一个副本,l构中包含了(jin)与指定类有关的信?
GetClassLong 取得H口cȝ一个Long变量条目
GetClassName 为指定的H口取得cd
GetClassWord 为窗口类取得一个整数变?
GetClientRect q回指定H口客户区矩形的大小
GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面H口Q句?
GetFocus 获得拥有输入焦点的窗口的句柄
GetForegroundWindow 获得前台H口的句?
GetLastActivePopup 获得在一个给定父H口中最q激z过的弹出式H口的句?
GetParent 判断指定H口的父H口
GetTopWindow 搜烦(ch)内部H口列表Q寻N属于指定H口的头一个窗口的句柄
GetUpdateRect 获得一个矩形,它描叙了(jin)指定H口中需要更新的那一部分
GetWindow 获得一个窗口的句柄Q该H口与某源窗口有特定的关p?
GetWindowContextHelpId 取得与窗口关联在一L(fng)帮助场景ID
GetWindowLong 从指定窗口的l构中取得信?
GetWindowPlacement 获得指定H口的状态及(qing)位置信息
GetWindowRect 获得整个H口的范围矩形,H口的边框、标题栏、滚动条?qing)菜单等都在q个矩Ş?
GetWindowText 取得一个窗体的标题QcaptionQ文字,或者一个控件的内容
GetWindowTextLength 调查H口标题文字或控件内容的长短
GetWindowWord 获得指定H口l构的信?
InflateRect 增大或减一个矩形的大小
IntersectRect q个函数在lpDestRect里蝲入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩Ş的交?
InvalidateRect 屏蔽一个窗口客户区的全部或部分区域
IsChild 判断一个窗口是否ؓ(f)另一H口的子或隶属窗?
IsIconic 判断H口是否已最化
IsRectEmpty 判断一个矩形是否ؓ(f)I?
IsWindow 判断一个窗口句柄是否有?
IsWindowEnabled 判断H口是否处于zd状?
IsWindowUnicode 判断一个窗口是否ؓ(f)UnicodeH口。这意味着H口为所有基于文本的消息都接收Unicode文字
IsWindowVisible 判断H口是否可见
IsZoomed 判断H口是否最大化
LockWindowUpdate 锁定指定H口Q禁止它更新
MapWindowPoints 一个窗口客户区坐标的点转换到另一H口的客户区坐标pȝ
MoveWindow 改变指定H口的位|和大小
OffsetRect 通过应用一个指定的偏移Q从而让矩ŞUdh
OpenIcon 恢复一个最化的程序,q将其激z?
PtInRect 判断指定的点是否位于矩Ş内部
RedrawWindow 重画全部或部分窗?
ReleaseCapture 为当前的应用E序释放鼠标捕获
ScreenToClient 判断屏幕上一个指定点的客户区坐标
ScrollWindow 滚动H口客户区的全部或一部分
ScrollWindowEx Ҏ(gu)附加的选项Q滚动窗口客户区的全部或部分
SetActiveWindow ȀzL定的H口
SetCapture 鼠标捕莯|到指定的窗?
SetClassLong 为窗口类讄一个Long变量条目
SetClassWord 为窗口类讄一个条?
SetFocusAPI 输入焦点设到指定的H口。如有必要,?x)激zȝ?
SetForegroundWindow 窗口设为系l的前台H口
SetParent 指定一个窗口的新父
SetRect 讄指定矩Ş的内?
SetRectEmpty 矩形设Z个空矩Ş
SetWindowContextHelpId 为指定的H口讄帮助场景Q上下文QID
SetWindowLong 在窗口结构中为指定的H口讄信息
SetWindowPlacement 讄H口状态和位置信息
SetWindowPos 为窗口指定一个新位置和状?
SetWindowText 讄H口的标题文字或控g的内?
SetWindowWord 在窗口结构中为指定的H口讄信息
ShowOwnedPopups 昄或隐藏由指定H口所有的全部弹出式窗?
ShowWindow 控制H口的可见?
ShowWindowAsync 与ShowWindow怼
SubtractRect 装蝲矩ŞlprcDstQ它是在矩ŞlprcSrc1中减去lprcSrc2得到的结?
TileWindows 以^铺顺序排列窗?
UnionRect 装蝲一个lpDestRect目标矩ŞQ它是lpSrc1Rect和lpSrc2Rect联合h的结?
UpdateWindow 强制立即更新H口
ValidateRect 校验H口的全部或部分客户?
WindowFromPoint q回包含?jin)指定点的窗口的句柄。忽略屏蔽、隐藏以?qing)透明H口
]]>
作?clhhome
发帖? 2004-05-05 23:53
摘要
在目前的状况来说Q英文PDF档案格式在网路上、与文g交换的应用上已经可以说非常成熟了(jin)Q但是中文方面的应用q比其他亚洲国家存在着更多的问题,以致於其应用的范围无法普?qing)。本文的L在於探讨PDF案格式的组成、制作以?qing)制作後的案特性,是以一U测试及(qing)探讨的方式来制作的?
壏V前a
由Adobe公司所开发的PDF案格式Q打着"跨文字、跨语言、跨q_、跨媒体、跨软体、跨世纪的电(sh)子文件交换格?Q以?q就是未?的口号出现在我们眼前Q这L(fng)一U文Ӟ它到底有何特别之处,有什麽能耐呢Q?
贰、何谓P(yng)DF档案
所谓「PDF可携式文件格式」是一U开攑ּ?sh)子文g格式Q符合美国Adobe公司Acrobat 之PDF标准Q,不论使用何种?sh)脑q_或应用Y体编辑的文gQ几乎都可{换成「PDF」格式互通用。除?jin)在萤幕上浏览与印刷效果Q文字、图型、媄(jing)像)(j)完全相同的式样外Q更提供多种注记工具让用者更有效率地阅读文g?
通常我们?x)把Acrobat?qing)PDF看作是同一件事QPDF是「Portable Document Format」的~写Q它主要目的是要在各种不同的电(sh)脑^C创造出一个共通的文g格式。换句话_(d)是希望不管在那一U电(sh)脑上制作的文Ӟ只要能{成PDF格式Q拿到另一U电(sh)脑上p毫无困难地打开阅读Q更能维持制作当时的格式与版面,看v来跟原来的格式一模一栗?
q个问题是在不同?sh)脑q_之间长期以来所存在的,常常在PC上制作的文g拿到MAC上,如果没有对等的Y体或版本Q即使有同样的Y体,版本不同或中、英文版不同可能都没办法互相打开Ҏ(gu)的档案,因而造成相当大的不便。如PDF格式的出玎ͼp使一个文件在不同q_上畅行无阻,而且看到的样子都一P在也不用再花力气把案格式{来{厅R?BR>
叁、PDF档案格式介绍
Portable Document Format可携带文件格式是难以处理的PostScript码精化成一个页面与物g的资料库。它包含字型、媄(jing)像及(qing)l压~的向量物gQ它是高度精的文件格式。正如其?可携带文件格?它ؓ(f)l一可预的高品质输出及(qing)可{用於多媒体用途作最?jng)_处理。PDFh讑֤?qing)媒介独立的?gu),它支援CMYK、特D色?qing)合q的色域定义。PDF是一个支援补漏白、拼大版?qing)可转换之页面取向的案Q一般h可以利用免费的Acrobat Reader软体在麦金塔?sh)脑、视H环境、Unix?qing)网际网路浏览器览?
制作PDF的程序有许多U,可以制作?gu)多不同性质?qing)不同用途的PDF。例如其中一U方法叫?蒔R"Q利用Adobe Acrobat Distiller软体Q可以将PostScript案转换成PDF档案Q另外也可以利用一U可选择周边讑֤的工具叫Adobe PDF WriterQ利用它可自动将文g储在成PostScript档案Q再自动转换成PDF案Q或者利用程序巨集或其他自动功能也可以将单独或多个PostScript案转换成PDF案?/P>
在以往的印前工作流E里客户若需作最後一M改,则需回原~辑应用E式修改Q再重新列印一ơ,而在PDF工作程中,只需使用Acrobat 直接修改PDF档,无需再重回原~辑应用E式修改列印?
一、PDF案l成
1.W一层包含文件的文字与图像?
2.W二层包含增效部份,例如书签Q超文字q结、导览等?
3.W叁层包含案的基本资讯Q例如字形资讯和交换参考表?
二、PDF案格式的特?/B>
PDF为PostScriptU化q後的档案,它已l去除了(jin)PostScript在解译时所可能发生的不定性,所以成功的转换成PDF後Q也q保在後箋的工作流E中能顺利的q行。?zhn)可以Q何应用Y体生的面转换成PDF档案Q完整的原文g之文字、图形、媄(jing)像、声韛_(qing)铄嵌入PDF案之中Q让你可以在最後一d~辑修改而无重回应用程式修改列印?/P>
在{换时可以选择文字包入PDF文g之中Q即使一个中文PDF案亦可在无安装中文字型的纯英文pȝ中正的开启列华ͼ真正的达到档案交换网路无国界。PDF亦可转换成内含字型的EPS案Q而{换成的EPS案可以再组版或其他软体汇入再用?
Q一Q?B>高压~?/B>
PDF案使用多种Ҏ(gu)来达到羃减原PostScript文g的目的,在图片压~的部分亦可支援q种格式压羃Q一般档案通常可以压羃臛_来的数十到数癑ֈ之一。尤其当使用者要在网路上发行?sh)子文gӞZ(jin)速度的考虑Q高压羃比就昑־特别重要?
1.JPEGQ?Joint Photographic Expert Group专业摄媄(jing)联合l织Q所推广的是一U减损性的?rn)态媄(jing)像压~演,ZU破坏性的压羃Ҏ(gu)来压~媄(jing)像品质,其应用范围对於彩色的q箋调图片较为适合?
2.Zip 是用Jean-loup Gailly Mark Adler的Zlib套装软体的g伸开发而成Q压~方式是适台有花UV底UҎ(gu)大片重复影像图。Acrobat 1.0分别提供?bit?bit的不同压~比的演,具取h法是以重复的资料Z?
3.CCITT Group1.CCITT Group4 是国际电(sh)话电(sh)信组l(International Coordinating Committee for Telephony & TelegraphyQ所订定的压~标准,用来压羃黑白影像l图软体所l制的图,或单色扫描图以?qing)线条稿。Acrobat 1.0提供q两U压~方式适合单色调线条稿Q如传真品质的档案?
4.Run length 是针对单色线条稿的压~,具有大区域的单色色块图?
5.Compress text & Line Art 文字?qing)线条都可以加以压羃?<注一>
Q二Q?B>讑֤独立
一?PostScript档案中包含了(jin)多种可能的合法程式码Q在某些条g?可能无法q行。例如那些依赖某些特D字体结构、或输出讑֤的程式码。相反的QPDF格式不含ME式l构Q因而得它更加安全Q也更适合 以电(sh)子资料Ş式储存或传输。PDF是ؓ(f)整合多种输出选项的网路所设计的,它是标准化及(qing)讑֤独立最?jng)_输出格式?对中文PDF文之要求,不采用中文系l时Q仍可独立显CZ文;采用中文pȝӞ则可搜寻中文词汇?
Q三Q?B>各页独立
PostScript文g的各间是相互关联的。这意味着你在跛_某页之前?L它前面所有的都处理q。而PDF格式q没有这个限制。你可以直接 阅读PDF案的Q何一,无须考虑其他c(din)?
Q四Q?B>注记
PDF案可以包含各种各样的注?-例如书签Q羃影,链接Q备注,文串Q标识和媒体盒。你可以用这些“注记”以提高档案的质量及(qing)可读性。这些“注记”更可以有效的协助案管理工?-例如制作、发送?{注、修正、完Eѝ以?qing)出版发行?
Q五Q?B>案保护
PDF案可容许设定密码和其他多种保护方式Q以防止非法使用。例?必须使用密码才允?dng)R诅R允许或不允许列印、复制、签注、或修改?
肆、中文PDF档案制作程
一、网|式{存PDF档案格式Q?/B>
PDF案在英文字型的产生斚wQ已可轻而易丄制作Q但在中文部分入前尚无法L地将|页直接转ؓ(f)PDF,而必间接的*一些{换才能将|页转ؓ(f)PDF。在目前的情冉|说呢Q在Acrobat1.0中以开启网늚功能只能用在英文|页上,只需使用Web Capture输入URL卛_英文网{成PDF档,且可保留其超q结部分的格式。但在中文网部分,中文字体则会(x)变成qQ所以必藉助Acrobat writer以及(qing)Distiller来列印PDF案Q虽然无法保留其连l的格式Q但可设定列印超q结表?
二、排版Y体{存PDF档案格式Q?/B>
目前常见的排版Y体对於PDF档案格式直接的支援程度ƈ不高Q大部分的排版Y体无法直接{存PDF,而必?列印的方式来产生。对於支援直接{存PDF案的Y体来_(d)Microsoft Officepd是最完整的了(jin)Q基本上只需要将Acrobat 1.0在Office之後安装Q即可在工具列生一个IconQ用者只需直接炚w即可启动一名ؓ(f)PDF Maker的程式,L的将文g转ؓ(f)PDF。其他如Page Maker、Quark Xpress或Illustrator则必d装外挂程式才可以直接转存PDF档。基本上各种软体所产生含中文字体的PDF案Q大致上可分ZQAcrobat Writer‟뀁"Acrobat Distiller″以?qing)"曲线‛_U生方式,其中案定w最大的是{为曲U的方式Q其ơؓ(f)Distiller产生Q最的是以Acrobat Writer产生。当以相同的格式产生Q用的软体不同Ӟ其档案大会(x)因ؓ(f)内含资讯的不同而有些少许的出入Q但其档案的Ҏ(gu)却是相同的?
其大致上的制作流E如下:(x) *********
三、PDF案格式在於输出时的作业程Q?/B>
PDF案在专业输出时需搭配PostScript 3之RIP方能发挥最大生产效能,因ؓ(f)PostScript 3直接支援PDF案格式Q当档案列印至PostScript 3 RIPӞRIP只需q行处理q网Q所以处理速度相对提升Q且列印品质较佳(如渐?。而若(zhn)原有的RIP只支援PostScript Level 2Q则在列印PDF案时会(x)需要多一个{换成PostScript Level 2的流E?
前端在Macq_上的排版软体使用CID ATM字型昄?qing)编辑,产生PDF案Q後端再使用Postscript字型或相容输出机输出?BR>
伍、亚z字型嵌入现?/B>
一、字型编码说明:(x)
亚洲字型要嵌入PDF案Q比英文字型的嵌入需要更多的软体Q以?qing)更复杂的技术。在此之前我们必说明亚z字型以?qing)英文型的差异点Q以?qing)其在不同^C的差异点。在亚太地区Q虽焉有用汉字,但每个国家或地区所使用的内码都不相同,兹就各地区的~码介绍如下
Q一Q?B>台湾地区
1.Big 5Q俗U大五码
2.Big 5 plusQBig 5扩编?
3.CNS11643Q中文标准交换码
Q二Q?B>中国大陆
1.GB2312-80Q通称国标?
2.GBK Q汉字内码扩展规?
Q三Q?B>日本
1.Shift JIS
2.EUC-JIS
Q四Q?B>韩国
1.KSC 5601
Q五Q?B>其他Q?
二、编码原则:(x)
1.文字之选择?qing)字体(zhn)?国字标准字体?为基?
2.?个位元组QbyteQؓ(f)中文码编码单位,q以16q位制之文数字表CZ
3.W合CNS 5205?qing)CNS7654之通信定则
4.依字之用频率而编排於各不同的字面
5.每字面按先笔划後部首的排列顺序来~订字码
三、CID 字型与TrueType字型QPostScript字型的关p:(x)
CID是取自於Character ID的羃写,此字元L识码的功用在於帮助检索及(qing)取用字元Q大量改q了(jin)其用效能,此种Ҏ(gu)最适合用於庞大的字体集如东方双位元文字Q中文、日文、韩文等。Acrobatq一定需要用CID字型Q亦可以使用TrueType字型Q但在用TrueType字型时若在印表机驱动E式字型选项中若选择字型传送ؓ(f)Type 1Ӟ则嵌入於PDF中的中文字无法再做增字的动作Q而选择字型传送ؓ(f)Type 42Ӟ则嵌入於PDF中的中文字可修改增减Q修Ҏ(gu)pȝ中需有相同的字型Q。中文PostScript字型目前无法适用於PDF案格式?/P>
内嵌字型的最大优点便在解x件生者与输出者之间字型不同或对应错误的问题,现在PS程是用字码对应Q且必须是同一家字型公司的同一pd版本才可对应Q字型内嵌可此问题一x逸的解决?
四、Acrobat Reader 能显C包?CJK 文字?PDF 档案的方式:(x)
要显C?CJK 文字Q有两种方式。一是在建立 PDF 案Ӟ作者可以嵌入所有文件中使用到的字体Q包?CJK 字体Q只要字体可以被嵌入p。Q何语a版本?Acrobat Reader 都可以用嵌入?CJK 字体来显C?PDF 案。但是因为嵌入字体的 PDF 案可能?x)占太多I间Q所以作者可能在建立档案旉择不嵌入文件中使用的所有字体,q是W二U方式;如果在这U情况下QAcrobat ?Acrobat Reader 的用者若要查看该 PDF 案Q就必须使用正确的亚z文字字体集?
五、目前亚z字体集中所包含的字体:(x)
目前有四个亚z字体集 Q繁体中文、简体中文、日文与韩文Q中Q每个都包括?serif ?sans-serif 字体??PDF 案中嵌入的亚洲字体的类型,在Windows q_上可嵌入 TrueType 字体Q而在 Macintosh ?Windows q_上可以嵌?CID 格式?Adobe PostScript 字体。较旧的 OCF 格式?PostScript 字体不能嵌入Q此外,文g中的字体必须容许嵌入?<注叁>
嵌入字体使PDF案大小改变的因素取x文g所包含的字体数量及(qing)字元多少。大体而言Q一般文件中每嵌入一?C、J ?K 字体QPDF 档案的大就?x)增?2 MB ?3 MB ?BR>
Macintosh ?Acrobat 1.0 中的「MakeCID 」可?TrueType 字体与较旧的 OCF 格式?PostScript 字体转换成「W(xu)idth-Only」(仅具宽度资讯Q??CID 字体。这?CID 字体仅包?TrueType ?OCF 字体中用的|马字元的宽度资讯,Distiller 在徏立参考原?TrueType ?OCF 字体?PDF 案Ӟ需要用到这U字形?BR>
如需更多资讯Q请参阅「MakeCID」公用程式资料夹中的文g。如需在罗马语a的作业系l中建立包含 CJK 文字?PDF 案Q仅具宽度资讯的 CID 字体可z上用场?Ҏ(gu)在罗马语a的系l上建立包含 CJK 文字?PDF来说QAcrobat 中的 PDF Writer是不能在|马语言的作业系l上建立包含 CJK 文字?PDF 案的。然而,如果 Distiller 可以使用它所要制作的 PostScript 案中所参考的字体Q那?Distiller p建立含有 CJK 文字?PDF 档案。如?PostScript 案含有嵌入?TrueType 字体Q?zhn)可以在Mq_上制作此 PostScript ?BR>
此外Q针对目?Adobe Type Library 中的所?CJK 字体Q以?Macintosh ?Windows pȝ中常见的 TrueType 字体QDistiller 都附有「W(xu)idth-Only」的 CID 字体。有?jin)这些字体资讯,Distiller 可以在Mq_上均可成功制?PostScript 案。此外,如果制作?PostScript 案中有其他的字体需要{换,q可以用「MakeCID」公用程式徏立仅具宽度资讯的 CID 字体?
陆、中文繁体字嵌入现况以及(qing)其所面(f)的问?/B>
目前来说Q支援中文PDF案字型内嵌的字集在Mac上只有文鼎的CID ATM字型Q在PC上有文鼎的CID PostScript字型Q以目前面(f)的问题来_(d)W一是档案大小Q第二就是目前在|\上用的USERq未普遍在个人PC上安装相关的览软体。特别是亚洲字型Q除?jin)浏览Y体外Q还必须加装亚洲文字字集方可开启嵌入亚z字型的PDF案。此外在印刷业上未能用PDF输出的做法?
柒、未来解x?/B>
PDF案是一U非常具有发展潜力的案格式QD凡各U格式的图文档案Q皆可{成PDF,未来无论是Microsoftpd的Y体、Corelpd、AdobepdQ都支援PDF案格式的生、修攏V编辑以?qing)输出。但q前来_(d)除了(jin)Adobe Acrobatpd有完整的功能以外Q其他Y体的功能都还未健全Q而且其他相关应用软体的种cdq繁杂,有待相关的Y体开发公司开发出更具整合性的应用软体?而案大的问题Q只有两个方法,L的方法ؓ(f)PDF以更高的比例压羃Q以利传输;而治本的Ҏ(gu)q是必须一斚w开发更宽频的网路;一斚w使之更普?qing),以利大量的资料在|\上传输?
捌、结?/B>
PDF档案格式qAcrobatҎ(gu)的档案格式,例如华康的DynaDoc档案格式亦ؓ(f)可携式文件的一U,其大致上的特性与Acrobat的PDF档案格式相近Q只是功能上有些许的出入。但基本上的目的、用途、生方式以?qing)浏览方式是非常相近的?
PDF档案有相当大的研发以及(qing)应用I间Q例如在?sh)子报方面,是一个非常好的PDF档案应用实例Q因Z般的?sh)子报大多只有大量的文字Q缺图片以?qing)活泼的版面Q得阅读者在览?sh)子资讯Ӟ会(x)觉得面?gu)版僵的文字Q而降低阅ȝ意愿Q如果能电(sh)子报~排成一般报U的版面Q以PDF档的格式表现在读者面前,如此有了(jin)zL的版面以?qing)图片,一定会(x)增加使用者阅ȝ意愿Q另外,PDF第二层的超q结功能亦可让用者从头条标题上直接连l,页面导引到报纸的内文中Q而省M(jin)逐页览的时间。当然了(jin)Q这部分的构惌得等使用者习(fn)惯於以Acrobat Reader阅读档案Q以?qing)各U问题解军_Q才能进入实验及(qing)应用阶段Q这是另一个网路出版的新出路?
玖、附?/B>
【注一】Acrobat4.0?sh)子文gCUP59~60
【注二】图片取自文鼎公司网?
【注叁】针对目前可支援Distiller作嵌入的文鼎字型来说Q只要ؓ(f)合法的原版字型,文鼎允怋用者嵌入?
【注四】用Distiller字形嵌入之文字Q因失去文字Ҏ(gu),故无法做搜寻?qing)复制?
名词解释
Q一QPostScriptQ?/B>
PostScript为美国Adobe(httpQ?/www.adobe.com)公司?985q所发表的文件描q技? Adobeq利用这个技? 创造着名合乎PostScript技术的字型, q从而改变正个印刷工?
PostScript可以_的描q^面绘制Q何文字及(qing)囑Ş. CPostScript的技术已l非常普遍的使用在印刷领? 包括萤幕昄(Display), 雷射印表?Laser Printer), 输出?Imagesetter), C印刷?Digital Printing)..{等输出讑֤. 而与PostScript技术搭配最重要的是PostScript字型, 使用者可以透过PostScript技术调整抹些参? 而改变字型的大小, 阴媄(jing)/立体/I心(j)/_细{特D效? 由於PostScript在印h面卓表? 目前世界上主要的文献几乎多是以PostScript的Ş式出? Adobe1997q?月发表了(jin)更进步的PostScript 3 增进品质?qing)彩色能力?qing)|际|\列印功能.
Q二QTrueTypeQ?/B>
TrueType字型格式为美国Apple?qing)Microsoft所共同制定. 最先用於Apple的Macintoshpd?qing)Microsoft Windows 3.1, 而目前Apple的OS 8.0?qing)Microsoft Windows 95/NT也都使用TrueType作ؓ(f)字型格式 基本上TrueType和PostScript一? 都是使用贝兹曲线(Bezier Curve)来描q的外框? 字型可以作Q意尺寸的攑֤~小, 或作其他属性的变化.不过由於Apple?qing)Microsoft的作业系l都直接支援此字型格? 所以ƈ不需要如PostScript一? 外挂(Adobe)Type Manager之类的程?
Q叁QATMQ?/B>
ATMQAdobe Type ManagerQ的功用在於理Type 1字型的用,ATM?x)自动将Type 1外框字点阵化以用Dq显C或印表机列华ͼ若所Ʋ列印的印表Zؓ(f)PostScript印表机,则ATM?x)将字型下蝲臛_表机Q由印表机做炚w化外框字。而欲列印的印表机Z般非PostScript印表机时Q则ATM?x)自动将Type 1外框字型炚w化再传送至印表机?
Q四QCIDQ?/B>
CID是取自於Character ID的羃写,此字元L识码的功用在於帮助检索及(qing)取用字元Q大量改q了(jin)其用效能,此种Ҏ(gu)最适合用於庞大的字体集如东方双位元文字Q中文、日文、韩文等?
Q五QUnicode~码Q?/B>
QUnicode~码Q即为ISO 10646国际~码标准Q完全符合Microsoft Office 2000?qing)Windows 2000之字型编码规|在单一作业pȝ下即可输入多国文字,使跨国文件的制作变得很轻?
1.Unicode Q?/B>
Big 5Qؓ(f)目前在台湾普遍所使用的业界标准,Big 5码包括第一字面5401个汉字,W二字面7652个汉字及(qing)440个符P目前支援Big 5的Y体包含Windows 95/NTQApple OSQ倚天中文pȝQ点阵印表机Q喷墨印表机Q雷印表机Q等{Y体讑֤都支持此内码Q但由於台湾的特D环境,所以ƈ非只使用Big 5码ؓ(f)唯一的内码,其他包括如金资码,财税码,?sh)信码,关码,IBM 5550码,h码,IBML码,公会(x)码(TCAQ,王安码,{等Q都分别使用於各U应用领域?
2.Big 5 PlusQ?BR>虽然Big 5字集为台湾最普遍使用的字集,但由於Big 5所定义的字集只?3053个汉字,q无法满I专业使用者的需要,其是政府部门,更无法满现阶段文g交换的需要,所以在"财团法h中文?sh)脑推广基金?的主持下完成对Big 5码的扩编Q详l资料可参?财团法h中文?sh)脑推广基金?|站QhttpQ?/www/cmexQorgQtwQ,包括~由Q码本,…等{相兌讯?BR>
3..CNS11643 中文标准交换码:(x)
CNS11643 中文标准交换码,一般简U?CNS 码或 CNS11643 Q因中央标准局公布?qing)修订之先後而有二个版本Q一般称?CNS11643-1986 版(1986公告版)(j)?CNS11643-1992 版(1992q修订版Q,此二个版本之差异仅在於其所~定之字C同?5 q公告之 CNS11643定义 11.051个汉字,81 q修订版扩编?8Q?27 个汉字?75 q公告之 CNS11643 名称为「通用汉字标准交换码」,?81 q扩充後修订 CNS11643 名称为「中文标准交换码」。两个电(sh)脑系l要交换资料Ӟ以两方皆认可之码传输Q此UCؓ(f)交换码,交换码之设计ȝ合国际标准。因此一般在?sh)脑内部处理时用内码,而在传输Ӟ再{换ؓ(f)标准交换码?
4.GB2312-80Q?/B>
GB2312-80Z国大陆最为普遍用的内码Q不论在?sh)脑作业pȝ如Apple Machitosh或Microsoft中文Windows体版Q都是以GB2312-80为内码,x其他周边装置Q如印表机,软体Q标{֍字机Q及(qing)其他各种软硬体也都是以GB2312-80为内码,即中文Windows 95虽以GBK为内码,但仍与GB2312-80相容 GB2312-80p范了(jin)6763个汉字及(qing)682个符P内容主要也都是简体化q的汉字Q与Gb2312-80相对应的为GB12345-90Q基本上GB12345-90仍保留原来繁体字的样子,但码序与GB2312-80相同Q另外增加了(jin)100多个多对一的汉?
5.GBKQ?BR>汉字内码扩展规范Q简UGBKQChinese Internal Code Specification GBK工作组?995q?0月成立,q於1995q?2月完成GBK规范Q基本上采用?jin)原来GB2312-80所有的汉字?qing)码位,q涵盖了(jin)原Unicode中所有的汉字20901.d收录?83个符P21003个汉字及(qing)提供?894个造字码位
由於GBK的编码,在与GB2312-80的部分采用了(jin)GB-2312完全相同的码序与字样Q所以市(jng)面上所有的合乎GB2312-80的文Ӟ案?qing)程式都可以在合乎GBK规范的系l上正常q行Q目前Microsoft体版中文Windows 95是以GBK为内码,又由於GBK同时也涵盖了(jin)Unicode所有CJK汉字Q所以也可以和Unicode做一一对应Q?UnicodeQhttpQ?/wwwQUnicodeQcomQ?Q(Universal Multiple Octet Coded Character SetQ?国际标准l织?984q?月成立IOS/IEC JTC1/SC2/WG2工作l,针对各国文字Q符可行统一性编码,1991q美国跨国公司成立Unicode ConsortiumQƈ?991q?0月与WG2达成协议Q采用同一~码字集Q目前Unicode是采?6 bit之编码架构,其字集内容与ISO 10646之BMPQBasic Multilingual PlaneQ相同,Unicode QUnicode ConsortiumQƈ?992q?月通过DISQDraft International StandardQ,目前版本为Unicode v1.0?996q公布,内容包含W号6811.汉字20901.韩文拼音11171.造字?400Q保?0249?5534个码位?
参考资?/B>
1.Publishing & Production
2.http://www.agfahome.com.tw/ Q台湾Agfa首页Q?
3.http://www.adobe.com QAdobe公司首页Q?
4.http://www.arphic.com.tw/ Q文鼎公叔R)(j)
5.http://www.dynalab.com.tw/ Q华康公司赏)(j)
6.Acrobat 4.0?sh)子文gCU?nbsp;
![]() |
现在 Java ~程语言已经q泛应用于互联网世界Q早?Sun 公司开?Java 语言的时候,已l考虑到对非英文字W的支持?jin)。Sun 公司公布?Java q行环境QJREQ本w就分英文版和国际版Q但只有国际版才支持非英文字W。不q在 Java ~程语言的应用中Q对中文字符的支持ƈ非如?Java Soft 的标准规范中所宣称的那样完,因ؓ(f)中文字符集不只一个,而且不同的操作系l对中文字符的支持也不尽相同Q所以会(x)有许多和汉字~码处理有关的问题在我们q行应用开发中困扰着我们。有很多关于q些问题的解{,但都比较琐碎Qƈ不能够满_家迫切解决问题的愿望Q关?Java 中文问题的系l研Iƈ不多Q本文从汉字~码常识出发Q分?Java 中文问题Q希望对大家解决q个问题有所帮助?/P> 汉字~码的常?/SPAN> Java 中文问题的初步认?/SPAN> String sEnglish = “apple? String sChinese = “苹果? String s = “苹?apple ? sEnglish 的长度是5QsChinese的长度是4Q?s 默认的长度是14。对?sEnglish来说Q?Java 中的各个c都支持得非常好Q肯定能够正显C。但对于 sChinese ?s 来说Q虽?Java Soft 声明 Java 的基本类已经考虑到对多国字符的支持(默认 UNICODE ~码Q,但是如果操作pȝ的默认编码不?UNICODE Q而是国标码等。从 Java 源代码到得到正确的结果,要经q?“Java 源代?> Java 字节?> ;虚拟?>操作pȝ->昄讑֤”的q程。在上述q程中的每一步骤Q我们都必须正确地处理汉字的~码Q才能够使最l的昄l果正确?/P> ?Java 源代?> Java 字节码”,标准?Java ~译?javac 使用的字W集是系l默认的字符集,比如在中?Windows 操作pȝ上就?GBK ,而在 Linux 操作pȝ上就是ISO-8859-1Q所以大家会(x)发现?Linux 操作pȝ上编译的cM源文件中的中文字W都Z(jin)问题Q解决的办法是在编译的时候添?encoding 参数Q这h能够与^台无兟뀂用法是 javac ?Cencoding GBK?/P> ?Java 字节?>虚拟?>操作pȝ”, Java q行环境 QJREQ?分英文版和国际版Q但只有国际版才支持非英文字W?Java 开发工具包 QJDKQ?肯定支持多国字符Q但q所有的计算机用户都安装?JDK 。很多操作系l及(qing)应用软gZ(jin)能够更好的支?Java Q都内嵌?JRE 的国际版本,己支持多国字W提供了(jin)方便?/P> “操作系l?>昄讑֤”,对于汉字来说Q操作系l必L持ƈ能够昄它。英文操作系l如果不搭配Ҏ(gu)的应用Y件的话,是肯定不能够昄中文的?/P> q有一个问题,是?Java ~程q程中,对中文字W进行正的~码转换。例如,向网输Z文字W串的时候,不论你是?/P> out.println(string);q是?/P> <%=string%>Q都必须?UNICODE ?GBK 的{换,或者手动,或者自动。在 JSP 1.0中,可以定义输出字符集,从而实现内码的自动转换。用法是 <%@page contentType=”text/html;charset=gb2312?%> 但是在一?JSP 版本中ƈ没有提供对输出字W集的支持,Q例?JSP 0.92Q,q就需要手动编码输Z(jin)Q方法非常多。最常用的方法是 String s1 = request.getParameter(“keyword?; String s2 = new String(s1.getBytes(“ISO-8859-1?,”GBK?; getBytes Ҏ(gu)用于中文字W以“ISO-8859-1”编码方式{化成字节数组Q而“GBK?是目标编码方式。我们从以ISO-8859-1方式~码的数据库中读Z文字W串 s1 Q经q上q{换过E,在支?GBK 字符集的操作pȝ和应用Y件中p够正显CZ文字W串 s2 ?/P>
.CLASS 文g存放在服务器端,由客L(fng)的浏览器q行 APPLET Q?APPLET 只v调入 FRAME cȝȝ序的作用。界面包?Textfield QTextAreaQListQChoice {?/P> I.?JDBC 执行 SELECT 语句从服务器端读取数据(中文Q后Q将数据?APPEND Ҏ(gu)加到 TextAreaQTAQ?Q不能正显C。但加到 List 中时Q大部分汉字却可正确昄?/P> 数据按“ISO-8859-1?~码方式转化为字节数l,再按pȝ~省~码方式 QDefault Character EncodingQ?转化?STRING Q即可在 TA ?List 中正显C?/P> E序D如下:(x)
在{换字W串时不采用pȝ默认~码方式Q而直接采用?GBK?或?“GB2312?,?A ?B 两种情况下,从数据库取数据都没有问题?/P> II.处理方式与“取中文”相逆,先将 SQL 语句按系l缺省编码方式{化ؓ(f)字节数组Q再按“ISO-8859-1”编码方式{化ؓ(f) STRING Q最后送去执行Q则中文信息可正写入数据库?/P> E序D如下:(x)
问题Q如果客h上存?CLASSPATH 指向 JDK ?CLASSES.ZIP ӞUCؓ(f) A 情况Q,上述E序代码可正执行。但是如果客h只有览器,而没?JDK ?CLASSPATH ӞUCؓ(f) B 情况Q,则汉字无法正{换?/P> 我们的分析:(x) 1.l过试Q在 A 情况下,E序q行时系l的~省~码方式?GBK 或?GB2312 。在 B 情况下,E序启动时浏览器?JAVA 控制C出现如下错误信息Q?/P>
然后pȝ的缺省编码方式ؓ(f)?859-1”?/P> 2.如果在{换字W串时不采用pȝ~省~码方式Q而是直接采用 “GBK?或“GB2312”,则在 A 情况下程序仍然可正常q行Q在 B 情况下,pȝ出现错误Q?/P>
3.在客h上,?JDK ?CLASSES.ZIP 解压后,攑֜另一个目录中Q?CLASSPATH 只包含该目录。然后一辚w步删除该目录中?.CLASS 文gQ另一边运行测试程序,最后发现在一千多?CLASS 文g中,只有一个是必不可少的,该文件是Q?/P>
该文g拷到服务器端和其它的cL在一Pq在E序的开?IMPORT 它,?B 情况下程序仍然无法正常运行?/P> 4.?A 情况下,如果?CLASSPTH 中去?sun.io.CharToByteDoubleByte.class Q则E序q行时测得默认编码方式ؓ(f)?859-1”,否则?“GBK??“GB2312??/P> 如果 JDK 的版本ؓ(f)1.2以上的话Q在 B 情况下遇到的问题得到?jin)很好的解决Q测试的步骤同上Q有兴趣的读者可以尝试一下?/P> Java 中文问题的根源分析及(qing)解决 c?PoorChinese 的源代码Q?/P>
执行 java PoorChinese 后,我们?x)得? pȝ变量 file.encoding 的gؓ(f) GBK Quser.language 的gؓ(f) zh Q?user.region 的gؓ(f) CN Q这些系l变量的值决定了(jin)pȝ默认的编码方式是 GBK ?/P> 在上q系l中Q下面的代码?GB2312 文g转换?Big5 文gQ它们能够帮助我们理?Java 中汉字编码的转化:
~码转化的过E如下:(x) GB2312------------------>Unicode------------->Big5 执行 java gb2big5 gb.txt big5.txt Q如?gb.txt 的内Ҏ(gu)“今天星期三”,则得到的文g big5.txt 中的字符能够正确昄Q而如?gb.txt 的内Ҏ(gu)“情快乐”,则得到的文g big5.txt 中对应于“节”和“乐”的字符都是W号“?”(0x3FQ,可见 sun.io.ByteToCharGB2312 ?sun.io.CharToByteBig5 q两个基本类q没有编好?/P> 正如上例一P Java 的基本类也可能存在问题。由于国际化的工作ƈ不是在国内完成的Q所以在q些基本cd布之前,没有l过严格的测试,所以对中文字符的支持ƈ不像 Java Soft 所声称的那样完。前不久Q我的一位技术上的朋友发信给我说Q他l于扑ֈ?Java Servlet 中文问题的根?/B>。两周以来,他一直ؓ(f) Java Servlet 的中文问题所困扰Q因为每面对一个含有中文字W的字符串都必须q行强制转换才能够得到正的l果Q这好象是大家公认的唯一的解军_法)(j)。后来,他确实不惛_此l安分下M(jin)Q因L(fng)事情实不应该是高E序员所要做的工作,他就扑և Servlet 解码的源代码q行分析Q因Z怀疑问题就出在解码q部分。经q四个小时的奋斗Q他l于扑ֈ?jin)问题的?gu)所在。原来他的怀疑是正确的, Servlet 的解码部分完全没有考虑双字节,直接?%XX 当作一个字W。(原来 Java Soft 也会(x)犯这qZU的错误Q)(j) 如果你对q个问题有兴或者遇C(jin)同样的烦(ch)恼的话,你可以按照他的步?对Servlet.jar q行修改Q? 扑ֈ源代?HttpUtils 中的 static private String parseName Q在q回前将 sbQStringBufferQ?复制?byte bs[] Q然?return new String(bs,”GB2312?。作上述修改后就需要自p码了(jin)Q?/P> HashTable form=HttpUtils .parseQueryString(request.getQueryString())或?/P> form=HttpUtils.parsePostData(…? 千万别忘?jin)编译后攑ֈ?Servlet.jar 里面?/P> Java ~程语言成长于网l世界,q就要求 Java 对多国字W有很好的支持?Java ~程语言适应?jin)计的|络化的需求,为它能够在网l世界迅速成长奠定了(jin)坚实的基?Java 的缔造?QJava SoftQ?已经考虑?Java ~程语言对多国字W的支持Q只是现在的解决Ҏ(gu)有很多缺陷在里面Q需要我们付怸些补偿性的措施。而世界标准化l织也在努力把hcL有的文字l一在一U编码之中,其中一U方案是 ISO10646 Q它用四个字节来表示一个字W。当?dng)在这U方案未被采用之前,q是希望 Java Soft 能够严格地测试它的品,为用户带来更多的方便?/P> ?/B>一个用于从数据库和|络中取?中文q的处理函?/B>Q入参是有问题的字符Ԍ出参是问题已l解决了(jin)的字W串?
|
Java内核是unicode的,pclass文g也是Q但是很多媒体,包括文g/的保存方式是用字节流的。因此Java要对q些字节经行{化。char是unicode的,而byte是字节。Java中byte/char互{的函数在sun.io的包中间有。其中ByteToCharConvertercL中调度,可以用来告诉你,你用的convertor。其中两个很常用的静(rn)态函数是Q?BR>
如果你不指定converterQ则pȝ?x)自动用当前的encoding,gbq_上用gbk,enq_上用8859_1?
如果代码改ؓ(f)Q?
l果又是什么? q就要根据^台的~码而定?
l果又是什么?q是Ҏ(gu)q_的编码而定? 很多中文问题是从这两个最单的cL生出来的。而却有很多类不直接支持把encoding输入Q这l我们带来诸多不ѝ很多程序难得用encoding?jin),直接用default的encodingQ这q我们UL带来?jin)很多困难? 二、utf-8 utf-8是和unicode一一对应的,其实现很单:(x)
大多数情冉|只用到16位以下的unicode:
׃只有两位我们按照两位的编码来排,但是我们发现q行不通,因ؓ(f)W7位不?因此Q返??"
三、string和byte[] string其实核心(j)是char[],然而要把byte转化成stringQ必ȝq编码。string.length()其实是char数组的长度,如果使用不同的编码,很可能会(x)错分Q造成散字和ؕ码。例如:(x)
如果encoding=8859_1Q会(x)有两个字Q但是encoding=gb2312只有一个字q个问题在处理分|l常发生? 四、Reader,Writer / InputStream,OutputStream Reader和W(xu)riter核心(j)是charQInputStream和OutputStream核心(j)是byte。但是Reader和W(xu)riter的主要目的是要把char?写InputStream/OutputStream。例如:(x)
l果是什么???。如果encoding ="8859_1"Q结果是什么?"??"两个字符Q表CZ认识。反q来的例子自己做? |
![]() |
我们常常没有用到encodingq个参数。其实encodingq个参数对于跨^台的操作是很重要的。如果没有指定encodingQ则按照pȝ的默认encoding,gbq_上是gb2312Q英文^C是iso8859_1。Java的编译器实际上是调用sun.tools.Javac.main的类Q对文gq行~译Q这个类有compile函数中间有一个encoding的变?-encoding的参数其实直接传lencoding变量。编译器是Ҏ(gu)q个变量来读取Java文g的,然后把用utf-8形式~译成class文g。例子代码:(x)
但是我们往往忽略掉这个参敎ͼ因此q样往往?x)有跨^台的问题Q? 样例代码在中文^C~译Q生成zhclass 样例代码在英文^C~译Q输出enclass (1) zhclass在中文^C执行ok,但是在英文^C不行 (2) enclass在英文^C执行ok,但是在中文^C不行 原因是:(x) (1) 在中文^C~译后,其实str在运行态的char[]?x4f60, 在中文^Cq行Qfilewriter的缺省编码是gb2312,因此chartobyteconverter?x)自动用调用gb2312的converter,把str转化成byte输入到fileoutputstream中,于是0xc4,0xe3放进?jin)文件。但是如果是在英文^CQchartobyteconverter的缺省值是8859_1, filewriter?x)自动调?859_1去{化str,但是他无法解释,因此他会(x)输出"?" (2) 在英文^C~译后,其实str在运行态的char[]?x00c4 0x00e3, 在中文^Cq行Q中文无法识别,因此?x)出??Q在英文q_上,0x00c4-->0xc4,0x00e3->0xe3Q因?xc4,0xe3被放q了(jin)文g? 六、其它原因:(x)
讄览器的昄~码Q如果response的数据是utf8~码Q显C将是ؕ码,但是q和上q原因还不一栗? 七、发生编码的地方Q? 1. 从数据库到JavaE序 byte——〉char 2. 从JavaE序到数据库 char——〉byte 3. 从文件到JavaE序 byte——〉char 4. 从JavaE序到文?char——〉byte 5. 从JavaE序到页面显C?char——〉byte 6. 从页面form提交数据到JavaE序byte——〉char 7. 从流到JavaE序byte——〉char 8. 从JavaE序到流char——〉byte 可以使用配置qo(h)器的Ҏ(gu)解决中文q的:(x)
|