ddc
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
上海网站建设 网站建设 域名注册 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 虚拟主机 域名注册 acg ACG玩家 品牌设计
求创科技
网站建设
中国互联
投稿
素材出售
中国设计秀
中资源
当前位置:网络学院首页 >> 设计教程 >> WAP网站攻略 >> WAP建站入门教程

WAP建站入门教程 (14)

来源:中国设计秀    作者:    点击:2387     加入收藏    发表评论
0
顶一下
GB2132转Unicode
    Unicode的原理也很简单。使用“&#x”加上ASCII码的数值文本再加“;”结尾。当然要注意的是:这里所指的ASCII数值并不是简单的内存数值(或者说是GB2132编码)。例如:“饱”字,在内存里面的数值是0xb1a5,而在Unicode映射表内是0x9971。请先看下面的一段小程序。在WML页面中混有英文和中文。中文是采用Unicode书写的。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1 //EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
    <card id="main" title="Chinese">
        <p>
            T;&#9971;
        </p>
    </card>
</wml>
在Nokia WAP Toolkit中的测试结果为(图2-35所示):

图 2-35 使用Unicode的中文WML页面
    可以看到“&#9971;”变成了“饱”字。如果用“&#b1a5;”或者直接使用GB2132编码(相当于直接书写中文)那么显示结果就可能是图2-36所示的样子。肯定要问自己,怎么会这样!原因就是在这个位置上的Unicode编码字符是个怪字符。

图 2-36 没有使用Unicode的中文WML页面
    对于英文字符可以使用Unicode方式,也可以不使用。那么Unicode编码如何获得呢?
    如果使用手工方式,那么可以在“附件”中找到“Unicode映射表”。打开映射表,选择“宋体”和“CJK Unified Ideograph”,在里面可以找到很多中文字符的Unicode编码。随便拷贝一个到WML文件中,百试百灵!就是使用的时候不是很方便。
    如果使用Visual Basic脚本语言编写服务端程序(例如:ASP),那么问题就简单多了。可以使用AscW这个函数来解决编码的问题。以下的几个编码函数就是这样做的。
    如果使用Visual C&C++编写服务端程序,那么必须使用到Windows的一个API函数:MultiButeToWideChar。这个函数可以实现Unicode的转换。
对于其他服务端脚本语言也应该有类似的函数。如果没有,那么就必须自己做一个转换工具,能把WML中的中文转换为Unicode。在MSDN提供的例子中有一个小的转换工具:Uconvert。但是好像不是很好用,不过可以研究里面的程序。在网络上有不少这样的实用小工具。

适用于ASP的转换程序
<%=replace(Server.HTMLEncode(request.form("text")),chr(13)+chr(10),"<BR>")%> >
以下是您的UNICODE码:
<textarea name="text" cols="40" rows="10">
<%=Server.HTMLEncode(unicode(request.form("text")))%>

第一个Basic程序
function unicode(str)

    for i = 1 to Len(str)
        c = Mid(str, i, 1)
        unicode = unicode & "&#x" & Hex(AscW(c)) & ";"
    next

end function

第二个Basic程序
function unicode(str)

    dim i,j,c,i1,i2,u,fs,f,p

    unicode=""
    p=""

    for i=1 to len(str)
        c=mid(str,i,1)
        j=ascw(c)
        if j<0 then
            j=j+65536
        end if
        if j>=0 and j<=128 then
            if p="c" then
                unicode=" "&unicode
                p="e"
            end if
            unicode=unicode&c
       else
            if p="e" then
                unicode=unicode&" "
                p="c"
            end if
            unicode=unicode&"&#"&j&";"
        end if
    next

end function

八、动态输出WBMP

WBMP的格式
    对于一个宽为16个像素,高15个像素的白色画面,WBMP文件的数据如下:
                0x00,0x00,0x10,0x0f,0xff,0xff.……0xff。
    头两个字节为0。第一个字节是文件类型,0表示非压缩的黑白图片。第二个是文件扩展,是保留字段。第三个字节为图片的宽。第四个字节图片的高。后面的都是图像数据。
    对于非压缩的黑白图片,数据格式有以下特点:每个位对应着一个像素。0表示黑色,1表示白色。高位开始到底位结束对应着从左到右的像素颜色。数据从低地址到高地址对应着图片从上到下。一个字节可以表示8个像素,不足的部分可以用0补齐。
    下面是一张太阳的图片:
0x00 //file type=0
0x00 //file extension 没有使用
0x14 //宽
0x14 //高
//Pixel data
0xfa,0xf5,0xf0,0xfb,0x6d,0xf0,0xfb,0xad,0xf0,0xfb,
0xdd,0x80,0x1b,0xfc,0x70,0xe7,0x1f,0xe0,0x7c,0xe7,
0xd0,0xbb,0xfb,0xd0,0xdb,0xfb,0xb0,0xd7,0xfd,0x70,
0xb7,0xfd,0xb0,0x77,0xf5,0xd0,0xfb,0xeb,0xe0,0xfb,
0xdb,0xf0,0x1c,0xe7,0x80,0xc7,0x1c,0x70,0xf7,0xfd,
0xf0,0xf7,0xbf,0xf0,0xf6,0x5d,0xf0,0xf5,0xed,0xf00
    以下的两个程序都是要显示一个长为5高为2的WBMP图片。该图片第一行为白色,第二行为黑色。为此使用Nokia WAP Toolkit做了一个5*2的WBMP图片,上行是黑的,下行是白的。整个WBMP文件总共六个字节,所有的数据如下:
0x00 //file type=0表示黑白的非压缩方式
0x00 //file extension保留字段
0x05 //宽
0x02 //高
0x00 //第一行像素
0xf8 //第二行像素
    由于宽为5不是8的倍数,因此右边的位使用0补齐。因此出现了第二行的0xf8,换成二进制就是:11111000。只有左边的五位是1,剩余的三位是0。
需要注意的是:在做测试之前需要在MIME文件类型映射表中加入相应的WBMP文件映射。

使用ASP动态输出WBMP图片
wbmp.asp

<%@ Language=VBScript %>
<%
    Function StoB(varstr)
        str2bin = ""
        For i = 1 To Len(varstr)
            varchar = Mid(varstr, i, 1)
            str2bin = str2bin & ChrB(AscB(varchar))
        Next
        StoB = str2bin
    End Function

    img=chr(0) & chr(0) & chr(5) & chr(2) & chr(0) & chr(&Hf8)

    Response.ContentType="image/vnd.wap.wbmp"
    Response.BinaryWrite stob(img)
%>
    WML调用部分的程序如下:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="main">
    <p>
        <img src="http://127.0.0.1/wap/wbmp.asp" alt=":)" />
    </p>
</card>
</wml>
    启动Nokia WAP Toolkit,在“Go”下选择“Open Location”,并输入URL地址(图2-37):

图 2-37 输入URL地址
在确认后,模拟器上出现图2-38:(短短的一条直线正是想要的WBMP!)

图 2-38 动态输出的WBMP图像

使用ISAPI动态输出WBMP图片
    先使用Visual C&C++ 6.0的ISAPI Wizard生成一个工程文件——WBMP。在WBMP.cpp中找到Default(CHttpServerContext* pCtxt)函数。按照下面的形式进行修改:
void CWBMPExtension::Default(CHttpServerContext* pCtxt)
{
/*
StartContent(pCtxt);
WriteTitle(pCtxt);

*pCtxt << _T("This default message was produced by the Internet");
*pCtxt << _T(" Server DLL Wizard. Edit your CWBMPExtension::Default()");
*pCtxt << _T(" implementation to change it.\r\n");

EndContent(pCtxt);
*/
AddHeader(pCtxt, "Content-type: image/vnd.wap.wbmp\r\n");

BYTE img[6]={0x00,0x00,0x05,0x02,0x00,0xf8};

CHtmlStream htmlStream;
htmlStream.Write(img,6);

*pCtxt<<htmlStream;
}
    WML调用部分的程序如下:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="main">
    <p>
        <img src="http://127.0.0.1/wap/wbmp.dll" alt=":)" />
    </p>
</card>
</wml>
    启动Nokia WAP Toolkit,在“Go”下选择“Open Location”,并输入URL地址(图2-39):

图 2-39 输入URL地址

    在确认后,模拟器上出现图2-40所示的内容:(短短的一条直线正是想要的WBMP!)

图 2-40 动态输出的WBMP图像
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
2006-12-23 11:47:00    出处:yesky
Google
热点文章/相关文章

音乐
嫁衣 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 没有人比我更爱你
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 明天过后 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 降临 下雨天 小酒窝 樱花草 恋爱新手 说唱脸谱 红色高跟鞋 寂寞才说爱 深深爱过你 爱上你是个错 即使知道要见面 不是因为寂寞才想你
城府 假如 花海 兰亭序 棉花糖 舍不得 最后一次 女人如烟 外滩十八号 我们的纪念 我们的无奈 心在跳情在烧 爱上你是我的错 爱情里没有谁对谁错