天天看点

WML语言与编程

WAP 构架

 

¨         WML 是一种适用于无线互连网的标记语言。

¨         WAP ( Wireless Application Protocol )是适用于无线互连网的网络协议。

¨         客户是各种基于 WAP 协议的手掌设备或者是各种模拟器。

¨         WAP 网关有两个功能:对 WML 网页进行编码和解码;实现 HTTP 协议和 WAP 协议之间的转换。

¨         WAP 服务器是指在 MIME 配置中设置了 WML 数据类型的 Web 服务器。

¨         为什么采用 WAP :方便、安全。

 

URL

¨         WML 使用和 HTML 相同的引用方式。

http://www.motorola.com/great.wml

¨         在 URL 后使用片段。

http://www.motorola.com/great.wml#login

¨         相对的 URL ——基础的 URL 是当前的卡片。

<go href=”/next” />

Content Type

¨         在互联网上使用 WML 数据类型。

¨         要想使用 Web 服务器传输 WML 数据类型,就需要对 Web 服务器的 MIME 设置进行配置。

¨         需要增加以下数据类型:

wml : text/vnd.wap.wml

wmlc : application/vnd.wap.wmlc (经过编码 WML 数据类型)

wmls : text/vnd.wap.wmlscript

wbmp : image/vnd.wap.wbmp     (BMP 图象 )

其他可选的数据类型:

wmlsc : application/vnd.wap.wmlscriptc

wmlscript : text/vnd.wap.wmlscript

ws : text/vnd.wap.wmlscript

wsc : application/vnd.wap.wmlscriptc

WML 字符集

¨         WML 是 XML 的子集,继承了 XML 的字符集设置。

¨         WML 文档缺省的字符集是 UTF – 8 。

¨         显示中文。只要在开头使用 encoding 就可以。在 Motorola L2000www 上测试通过。

<?xml version="1.0" encoding="gb2312"?>

 

元素和属性

¨         元素

1 .一个完整的 WML 标记有以下两种格式:

       <tag> content </tag>

       <tag/>

¨         属性

1.  可以随意地指定或添加元素的属性。

2.  属性的格式: <tag attr=”abcd”/> 。

3.  所有的 XML 名字都是大小写敏感的。

4.  所有的属性值都必须用双引号或单引号括起来。

变量

¨         WML 卡片中可以使用变量。

¨         描述变量的语法在 WML 中有最高的解释优先级。

¨         当空格无法表示一个变量名结束的时候,就必须使用括号将参数名括起来。

¨         $$ 在 WML 中代表一个‘ $ ’符号。

¨         变量语法格式如下:

$identifier

$(identifier)

$(identifier:conversion)

¨         变量使用说明:

1.  可以在字符串中使用。

2.  可以在运行中更新变量的值。

3.  变量处于设置状态( NOT NULL ),如果变量不等同于空字符串。

4.  变量处于未设置状态( NULL ),如果变量等同于空字符串。

¨         变量替代:

1.  变量的数值可以代入卡片中的文本。

2.  只有文本部分可以实现替代。

3.  任何元素和属性都不能使用变量来替代。

4.  替代将在运行期发生。

5.  替代将不影响变量现在的值。

6.  替代是按照字符串替代的方式工作。

7.  如果一个没有定义的变量要实现替代,那么该变量将被看作空字符串。

8.  变量名是由 US-ASCII 码、下划线和数字组成,并且只能以 US-ASCII 码开头。

9.  变量名是大小写敏感的。

‘ $ ’符号

¨         美元符号

1.  要想在文本中显示美元符号,必须成对使用。

2.  一个美元符号表示变量替代。

3.  一个简单的显示美元符号的例子:

This is a $$ character.

¨         有效性

1.  在美元符号后面接字符串都将被认为是变量替代或者是生效。

2.  几个无效的例子:

<!--bad variable syntax -->

Balance left is $10.00.

<!—bad placement (in the type attribute)-->

<do type=”x-$(type)” label=”$type”>

Newcontext 属性

       Newcontext 等于 true 或 false ,将决定浏览是否做以下事情:

¨         删除所有在当前上下文中定义的变量。

¨         清除历史信息。

¨         重新设置所有的状态为一个缺省的状态。

<card id=”card1” title=”Mortgage Calc” newcontext=”true”>

大小写敏感

¨         WML 和 XML 都是大小写敏感的语言。

¨         所有的 WML 标记和属性都是大小写敏感的。

¨         任何枚举的属性值也是大小写敏感的。

页面和卡片

¨         WML 是 XML 语言的子集。

¨         一个 WML 应用是由许多页面( Deck )所组成的。一个 WML 的页面就相当于 HTML 的一页。

¨         一个 WML 页面是由文件声明和 WML 标记对组成。

¨         WML 标记对中间有一个或多个卡片组成。

¨         WML 就是在各个卡片之间转换和传递信息。

WML 标记对

¨         WML 标记对是任何一个 WML 页面的根元素。

¨         WML 标记对中可以包含一个或多个卡片,和可选的头元素。

¨         WML 标记对中可以使用可选的“模板”来生成其所包含的所有卡片。

WML 例子

       <wml>

              <card>

                     <p>

                            <do type=”accept”>

                                   <go href=”#card2”/>

                            </do>

                            Hello world !

                            This is the first card…

                     </p>

              </card>

              <card id=”card2”>

                     <p>

                            This is the second card.

                            Goodbye

                     </p>

              </card>

       </wml>

文件声明

¨         XML 声明总是在文件的第一行。

<?xml version=”1.0”?>

¨         DOCTYPE 声明。

<!DOCTYPE WML PUBLIC “-//WAPFORUM//DTD WML1.1//EN” http://www.wapforum.org/DTD/wml_1.1.xml>

事件与导航

¨         导航与事件处理:

1.  WML 包括导航和事件处理模块。

2.  WML 允许作者指定需要处理的事件。

3.  事件可以和所需要完成的任务捆绑在一起。

4.  URL 导航就是这样的一个例子。

5.  事件捆绑是通过几种元素声明来完成的,包括: go 、 do 和 onevent 。

6.  Do 元素比 Go 元素需要用户更多的参与。

Do 元素

¨         Do 元素提供了一个通用的事件处理机制,使得用户可以参与当前卡片的事件处理。

¨         WML 提供一些预先定义的 Do 模块。

¨         accept :确定(或接受)。

¨         prev :返回到上次的位置。

¨         help :请求帮助。

¨         options :上下文敏感的选项请求。

<do type=”options” name=”do1” label=”options”>

       <go href=”/options”/>

</do>

任务

¨         Go 元素——当用户选中该元素时,就引导用户去 WML 中指定 URL 。

<go href=http://www.mot.com.wireless.wml>Motorola Wireless</go>

¨         Prev 元素——当用户选中该元素时,就引导用户去上次用户访问过的 URL 。

<do type=”options” name=”do1” label=”default”>

       </prev>

</do>

¨         Refresh 元素——当用户选中该元素时,变量值将被重新设置。

<do type=”refresh”>

       <refresh>

              <setvar name=”firstname” value=”david”>

              <setvar name=”lastname” value=”smith”>

              <setvar name=”age” value=”29”>

       </refresh>

</do>

Setvar 元素

¨         指定在当前的上下文中的变量的值,从侧面影响正在运行的任务。

¨         必须使用 name 属性指定变量的名字。

¨         必须使用 value 属性指定所需要赋给变量的值。

Select 元素和 Option 元素

¨         Select 元素和 Option 元素是用来在 WML 中形成选择任务。

¨         Option 元素可以指定在用户作出选择后的目标地址。

<select name=”type”>

       <option value=”boxed” onpick=”#selectBoxed”>boxed</option>

       <option value=”arranged” onpick=”selectArranged”>arranged</option>

</select>

Input 元素

¨         Input 元素是用来收集用户的输入。

1.  name 属性是用来指定变量的名字。

2.  value 属性可以指定变量缺省的值。

<input name=”firstname” type=”text” value=”Robert” format=”*A” maxlength=”32”/>

<input type=”text” name=”age” format=”*N”/>

<input type=”text” name=”address” format=”*M”/>

<input type=”password” name=”password”/>

3.  type 属性可以用来指定按密码输入模式进行输入,否则就是普通的文本输入模式。

4.  format 属性用来指定输入的内容是数字( N )、字母、字母和数字,输入长度,大写或者小写等等。

Text 元素

¨         段落: <p></p> (自动换行模式切换)

¨         空白:空格、制表符和换行都将被显示为空白。

¨         重点: em (强调), strong (特别强调), i (斜体), u (下划线), big (预定义的大字体), small (预定义的小字体)。

¨         br 元素:建立新的一行。

<p>

       <b>

              Welcome to…

       </b>

       <strong><i>

              Mobile

       </i></strong>

       <u>

              ADK

       </u>

</p>

超级链接

¨         a 元素和 anchor 元素被用来创建一个超级链接。选中该元素的时候,用户将被带入到链接的地址(可以是另外的页面或者是同一页面下的不同卡片)。

¨         也可以不使用 a 元素和 anchor 元素,而采用 go 元素中的 href 属性来创建一个超级链接。

1 . <anchor>follow me

              <go href=”destination”/>

</anchor>

              2 . <a href=”destination”>follow me</a>

              3 . <do type=”accept” label=”ACCEPT”>

                            <go href=”http://www.abc.com/yourcode” method=”post”>

                                   <postfield name=”w” value=”12”>

                                   <postfield name=”password” value=”your password”/>

                            </go>

                     </do>

Timer 元素

¨         Timer 可以用来延时显示页面或卡片,或在页面和卡片间实现切换以取得动画效果。

¨         下面的例子就是在显示“ Hello World ”五秒钟后,用户将被自动引导至 “/next” 所指定的位置:

<wml>

       <card ontimer=”/next”>

              <timer value=”50”/>

              <p>

                     Hello World !

              </p>

       </card>

</wml>

注释

¨         简单的注释(单行或多行,注释中没有 WML 标记)。

<!—Put simple comment here -->

¨         使用 CDATA 标记来实现带有 WML 标记的注释。

<![CDATA[lot of stuff here <b>bold text</b>…

       …

       <table column=”2”>…</table> still lot more

       …

]]>

Template 元素

¨         Template 元素声明一个在页面中所有卡片都可以使用的事件处理模块。

1.  模块中的事件处理将自动应用于同一页面中的所有卡片。

2.  某个卡片可以通过定义同名的事件处理来替代模块中的事件处理。

<wml>

       <template>

              <do type=”options” name=”do1” label=”default”>

                     <prev/>

              </do>

       </template>

       <card id=”first”>

              <!— 该卡片将自动套用模块中定义的事件处理过程 -->

              …

       </card>

       <card id=”second”>

              <!— 该卡片将使用空操作( noop )来替代模块中定义的事件处理过程,那么就等价于该卡片中没有该事件处理过程 —>

              <do type=”options” name=”do1”>

                     <noop/>

              </do>

              …

       </card>

       <card id=”third”>

              <!— 该卡片使用同名的事件处理替代模块中提供的事件处理 —>

              <do type=”options” name=”do1” label=”options>

                     <go href=”/options”/>

              </do>

       </card>

</wml>

Table 元素

¨         Table 元素是用来创建能容纳文本和图片的表格。

1.  align 属性是用来指定对齐的方式( ”L” 是左对齐, ”C” 是对中, ”R” 是右对齐。缺省的对齐方式是从左到右的左对齐方式)。

<table columns=”2”>

        <tr><td>One</td><td>Two</td></tr>

        <tr><td>1</td><td>2</td></tr>

        <tr><td>BA</td><td>B</td></tr>

</table>

2.  tr 元素用来指定表格的行。

3.  td 元素用来指定表格的列。

<table columns=”2”>

        <tr><td>One</td><td>Two</td></tr>

        <tr><td>1</td><td>2</td></tr>

        <tr><td>BA</td><td>B</td></tr>

</table>

图标

¨         alt 属性指定可选的文本,当设备不能显示图象的时候。

¨         src 属性指定图象的来源。

¨         align 属性指定图象与相临的文本对齐。

<p>

       <img alt=”MOTOROLA” src=”http://ni-icsd/genevaw/logo.gif”/><br/>

       Telecom 99

</p>

Postfield 元素

¨         指定向原始服务器指定提交时候的参数名字和参数数值。

1.  Login 和 Password 效验是最常用提交。

2.  一个使用 go 元素的提交例子。

<go href=”http://193.120.145.194:80/wap” methos=”post”>

       <postfield name=”LI” value=”$LI”/>

<postfiels name=”PV” value=”$PV”/>

</go>

事件

¨         ontimer 事件:该事件发生在计时器过期的时候。

¨         onenterforward 事件:该事件发生在用户选中一个有效的 URL 之后,在正式引导用户去该 URL 地址之前。

¨         onenterbackward 事件:该时间发生在用户选中一个有效的 Prev 操作之后,在正式引导用户之前。

¨         onpick 事件:该事件发生在用户选中某个选项。

<card>

       <onevent type=”onenterforward”>

              <go href=”/url_to_check_security”/>

       </onevent>

       <p>

              Help

       </p>

              </card>

              <card onenterforward=”/url_to_check_security”/>

                     <p>

                            Hello

                     </p>

              </card>

WML 核心数据类型

¨         长度

1.  可以用整数指定画布(屏幕、纸张)的像素大小,或者用百分数表示占用的长度或宽度。

2.  “ 50 ” =50 个像素。

3.  “ 50% ” = 占用一半的位置。

4.  只能用在属性值中。

ID 和 Class 属性

¨         所有的 WML 元素有两个核心属性: id 和 class 。

¨         这两个属性被用于服务器方的信息传输。

¨         id 提供某个元素在页面中唯一的名字。

¨         class 接收元素一个更多的 class 定义。

¨         多个元素可以使用同一个 class 定义。

¨         class 的名字是大小写敏感的。

¨         元素也可以作为 class 中的一个部分。

WML 编程指导

¨         尽量是用户的操作简单、友好。

1.  建立一个操作流程图。

2.  定义每个卡片的操作。

3.  保持每个卡片小而且简单。

4.  尽量减少按键的次数。

5.  不要使用 WML 所有的属性(各个厂家对 WML 兼容情况是不同的)。

创建一个新的 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=”card_name” title=”title_name”>

                     <!—write your code here-->

              </card>

       </wml>

修改卡片

¨         根据自己的需要改变卡片的 id 和 title 。

¨         增加卡片的内容。

<?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=”welcome” title=”welcome”>

              <p>

                     MADK WML DEMO.

              </p>

       </card>

</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=”welcome” title=”welcome”>

                     <do type=”accept”>

                            <go href=”#greeting”/>

                     </do>

              <p>

                     MADK WML DEMO.

              </p>

              </card>

              <card id=”greeting”>

                     <p>

                            Welcome to the wireless bookshop.

                     </p>

              </card>

       </wml>

建立一个动画消息

       <card id=”greeting” ontimer=”#card2” title=”Toolkit Demo”>

              <timer value=”30”/>

              <p>

                     <big>

                            Welcome to…

                     </big>

              </p>

       </card>

       <card id=”card2” ontimer=”#card3” title=”Toolkit Demo”>

              <timer value=”30”/>

              <p>

                     <b>

                            the Wonderful

                     </b>

                     <u>

                            Wireless

                     </u>

              </p>

       </card>

       <card id=”card3” title=”Toolkit Demo”>

              <p>

                     <big><i>

                            Bookstore.

                     </i></big>

              </p>

       </card>

建立选择列表

       <card id=”card3” title=”Toolkit Demo”>

              <do type=”accept”>

                     <go href=”#collectBookType”/>

              </do>

              <p>

                     <b><i>

                            BookStore.

                     </i></b>

              </p>

       </card>

       <card id=”collectBookType”>

              <p>

                     Science or novel:

                     <select name=”type”>

                            <option value=”science” onpick=”#science”>Science</option>

                            <option value=”novel” onpick=”#novel”>novel</option>

                     </select>

              </p>

       </card>

更多的选择

       <card id=”science”>

              <p>

              select science title:

              <select name=”productID”>

                     <option value=”universe” onpick=”#price”>The Universe</option>

                     <option value=”space” onpick=”#price”>Facts About Space</option>

                     <option value=”time” onpick=”#price”>Time Machine</option>

              </select>

       </p>

</card>

<card id=”novel”>

       <p>

              select novel title:

              <select name=”title”>

                     <option value=”speed” onpick=”#price”>Speed</option>

                     <option value=”terminator” onpick=”#price”>Terminator</option>

                     <option value=”ghost” onpick=”#price”>Ghost</option>

              </select>

       </p>

</card>

Scrollbar 与 Setvar

       <card id=”price”>

              <do type=”accept”>

                     <go href=”#copies>

                            <setvar name=”price” value=”30.0”/>

                            <setvar name=”discount” value=”0.00”/>

                     </go>

              </do>

              <p>

                     Click accept to find the

                     Price and enter number of copies you need:

              </p>

       </card>

使用 Input

¨         使用正确的格式。

¨         选择一个合适的标题。

¨         限制所输入内容的最大长度。

<card id=”copies”>

       <do type=”accept”>

              <go href=”#collectName”/>

       </do>

       <p>

              select number of copies:

              <input name=”uint” title=”No Of Copies’ format=”*N” maxlength=”9”/>

       </p>

</card>

¨         收集名字

<card id=”collectName”>

       <do type=”accept”>

              <go href=”#collectAddress”/>

       </do>

       <p>

              name:

              <input name=”fullName” title=”Full Name” format=”*A” maxlength=”9”/>

       </p>

</card>

¨         收集地址

<card id=”collectAddress>

       <do type=”accept”>

              <go href=”#cardType”>

                     <setvar name=”ship” value=”4.0”/>

              </go>

       </do>

       <p>

       address:

       <input name=”address” title=”Address” format=”*M” maxlength=”9”/>

</p>

</card>

选择信用卡类型

       <card id=”cardType”>

              <p>

                     what kind of credit card?

                     <select name=”creditCardType”>

                     <option value=”visa” onpick=”#cardNo”>visa</option>

                     <option value=”mastercard” onpick=”#cardNo”>mastercard</option>

                     <option value=”discover” onpick=”#cardNo”>dicover</option>

                     </select>

              </p>

       </card>

输入信用卡号码

       <card id=”cardNo”>

              <do type=”accept”>

                     <go href=”#cardDate”/>

              </do>

              <p>

              card number

              <input name=”cardNumber” title=”Card Number” format=”*N” maxlength=”16”/>

              </p>

       </card>

信用卡过期日期

       <card id=”cardDate”>

              <do type=”accept”>

                     <go href=”#confirmation”/>

              </do>

              <p>

              expiration date

              <input name=”creditCardExp” title=”Expiration Date” format=”*N” maxlength=”8”/>

              </p>

       </card>

确认

       <card id=”confirmation”>

              <p>

                     Each is $$ $(price), you ordered $(unint) copies,

                     Shipping is $$ $(ship), and total is $$64,

                     Thank you ! Bye Bye !

              </p>

       </card>

复合卡片的应用

       <card id=”collectAddress”>

              <do tyoe=”accept”>

                     <go href=”card.wml#cardType”>

                            <setvar name=”ship” value=”4.0”/>

                     </go>

              </do>

              <p>

              address:

              <input name=”address” title=”Address” format=”*M”/>

              </p>

       </card>

复合站点的应用

       <card id=”collectAddress”>

              <do type=”accept”>

                     <go href=”http://www.abc.com/wml/card.wml#cardType”>

                            <setvar name=”ship” value=”4.0”/>

                     </go>

              </do>

              <p>

              address:

              <input name=”address” title=”Address” format=”*M”/>

              </p>

       </card>

调用 WMLScript 函数

       <card id=”confirmation”>

              <do type=”accept” label=”Calculate”>

                     <go href=”calculateTotal.wmls#calculateTotal($(price),$(unit),$(ship))”/>

              </do>

              <p>

                     Each is $$ $(price),

                     You ordered $(unit) copies,

                     Shipping is $$ $(ship), and

                     Total is $$ $(total)

              </p>

       </card>

WMLScript 例子

       //wml script used by book store application

       extern function calculateTotal(a,b,c)

       {

              //a: unit price

              //b: number of units

              //c: shipping charges

             

              var total=a*b+c;

              WMLBrowser.setVar(“total”,total);

              WMLBrowser.refresh();

       }

WBMP 格式

经过仔细地研究,发现 WBMP的格式如下(例如Width=16,Height=15的一个白色的画面):

0x00,0x00,0x10,0x0f,0xff,0xff......,0xff。

头两个字节为0,现在还不清楚它的用途。

第三个字节为Width,第四个字节为Height,后面的是数据。

数据有以下特点:用一个Bit对应一个Pixel。0表示黑色,1表示白色。高位开始到底位结束对应着从左到右,数据从低地址到高地址对应着从上到下。一个字节可以表示8个像素,不足的部分可以用0补齐。

下面是一张太阳的图片,仅供参考。

0x00,0x00,//Unknown or reserved,maybe the mark for the wbmp

0x14,//Width

0x14,//Height

//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,0xf0

因此在知道了WBMP的格式后,就可以在WAP移动设备上做出各种图形,甚至是绘图。本来WAP终端设备一般是不支持图形模式,但是可以在服务端将所有的图形按照WBMP的格式准备好再送往WAP终端设备,那么看起来就好象在WAP终端设备上直接绘图。大家可以去 http://www.infoislive.com/demo 看看。

使用ASP实现WML

<%@ Language=VBScript %>

<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

    <card id="MainCard" title="Yestock">

           <p mode="nowrap">

           Yestock<br/>

           <select>

           <option onpick="http://202.96.168.13/wap/Chinese.wml"> 中文 </option>

           <option onpick="http://202.96.168.13/wap/English.wml">English</option>

           </select>

           </p>

    </card>

</wml>

注意:在 <% Response.ContentType=”text/vnd.wap.wml” %> 后面一定要紧接 <?xml version=”1.0” encoding=”gb2312”?> 。两者间不能有空格和回车。否则在 WinWAP 上可以浏览,但在 WAP 移动设备上就行不通!

解决 WAP 中文问题

       WML 是 XML 的一种应用,而 XML 的缺省编码是 UTF-8 ,也就是 Unicode 的 8 位编码方式。如果不特殊说明,那么 XML 将认为你采用的是 UTF-8 的编码方式。这就造成了一个问题,我们通常使用 GB2312 编码方式,几乎所有的文档内容都采用了 GB2312 方式,数据库中也不例外。而 Unicode 和 GB2312 的编码有很大的不同,可以说根本不一样,这是造成乱码的原因。

    任何编码方式包括什么日文,韩文,希腊文,阿拉伯文等都能轻松转换成 Unicode ,你可以在同一段文档中加入 N 种语言。虽然现有的应用软件很少采用 Unicode ,但 Windows NT 的内核却采用 Unicode 来处理字符。 Unicode 方式有两个吸引人的个性:独立且宽容。

    如何解决这些问题,现在主要有以下的几种方法:

        方法一:直接采用 UTF-8 编码

        方法二:直接采用 GB2312 编码

        方法三:采用字符转换的方式

        方法四:配置你的应用服务直接输出 UTF-8 编码 ( 适用于 IIS)

下面具体来讲一下这几种方法 :

方法一:直接采用 UTF-8 编码

    这种方法无需多讲。如果你的内容可以轻易转换到 UTF-8 编码还需要什么呢?

坏处:需要对你的服务内容全面的转换,而且与现有的大多数应用不兼容。

方法二:直接采用 GB2312 编码

    也很简单,在你的编码声明时,标注采用 GB2312 编码方式,具体做法如下,

    <?xml version="1.0" encoding="GB2312"?>

       Motorolar L2000www 和 Nokia 7110 都支持该种方式 。

坏处:有些终端不支持 GB2312 编码,仍然会有乱码。

方法三:采用字符转换的方式

    “ &#x5929;&#x4e0b;&#x706b;&#x529b; ”转换成中文。其思想是用 ASCII 字符表现更大字符集中的字符。比如你要展现希腊文的小写的 alpha 。 alpha 在 Unicode 的编码中是 945 , 16 进制就是 3B1 ,于是你写下 “ &#945; ”或者“ &#x3B1 ” 显示的就是小写的 alpha α 。你只需要知道汉字的 Unicode 编码,将其转换成“ &#xXXXX; ”的形式。你只要用 ASCII 编码方式就行了,任何平台都能处理,而且 HTML 也支持。本文中蓝色的天下火力就是用这种方式写的。如果你看不到,表示你的浏览器不支持这种方式。

坏处:增加了文件长度,使得带宽本来还不高的无限互连网更慢;不能直观的看到中文,万一手一抖后果不堪设想。

方法四:配置你的应用服务直接输出 UTF-8 编码 ( 适用于 IIS)

    在 IIS 的 Response Object 有一个属性 CharSet, 按微软的说法只要这么做就行:

    <% Response.Charset("UTF-8") %>

坏处:这种方法,只适用于 Windows NT 下 IIS 的 ASP 编程。其他的平台和 Web Server 有没有如此简单的方式。

WML 标记的速查表

Element  Syntax 
<wml>  

<wml xml:lang="lang" >

    content

</wml>  

<card>  

<card id="name"

       title="label"

       newcontext="boolean"

       style="style"

       onenterforward="url"

       onenterbackward="url"

       ontimer="url" >

    content

</card>  

<template>  

<template onenterforward="url"

           onenterbackward="url"

           ontimer="url" >

    content

</template>  

<head>  

<head>

    content

</head>  

<access>  

<access domain="domain"

         path="path" />  

<meta>  

<meta name="name"|http-equiv="name"

       content="value"

       forua="true | false" />  

 
Element  Syntax 
<timer>  

<timer name="variable"

        value="value" />  

 
Element  Syntax 
<setvar>  

<setvar name="name"

      value="value" />  

 
Element  Syntax 
<anchor>    
<a>  

<a title="label" >

    task

    text

</a>  

 
Element  Syntax 
<do>  

<do type="type"

     label="label"

     name="name"

     optional="boolean" >

task

</do>  

<onevent>  

<onevent type="type" >

    task

</onevent>  

 
Element  Syntax 
<go>  

<go href="url" target="_blank" rel="external nofollow"

     sendreferer="boolean"

     method="method"

     accept-charset="charset"

content

</go>  

<prev>  

<prev>

    content

</prev>  

<noop>   <noop/>  
<refresh>  

<refresh>

    content

</refresh>  

 
Element  Syntax 
<img>  

<img alt="text"

      src="url"

      localsrc="icon"

      align="alignment"

      height="n"

      width="n"

      vspace="n"

      hspace="n" />  

 
Element  Syntax 
<input>  

<input name="variable"

        title="label"

        type="type"

        value="value"

        default="default"

        format="specifier"

        emptyok="boolean"

        size="n"

        maxlength="n"

        tabindex="n" />  

<select>  

<select title="label"

         multiple="boolean"

         name="variable"

         default="default"

         iname="index_var"

         ivalue="default"

         tabindex="n" >

    content

</select>  

<option>  

<option title="label"

         value="value"

         onpick="url" >

    content

</option>  

<optgroup>  

<optgroup title="label" >

    content

</optgroup>  

<fieldset>  

<fieldset title="label">

    content

</fieldset>  

 
Element  Syntax 
<b>  

<b>

    text

</b>  

<big>  

<big>

    text

</big>  

<br>   <br/>  
<em>  

<em>

    text

</em>  

<i>  

<i>

    text

</i>  

<p>  

<p align="alignment"

     mode="wrapmode" />  

<small>  

<small>

    text

</small>  

<strong>  

<strong>

    text

</strong>  

<table>  

<table align="alignment"  

        title="label"  

        columns="n"/>  

<td>   <td>content</td>  
<tr>  

<tr>  

   <td>content</td>  

</tr>  

<u>  

<u>

    text

</u>  

 
Element  Display character 
&lt;   < (less than) 
&gt;   > (greater than) 
&apos;   ' (apostrophe) 
&quot;   " (quote) 
&amp;   & (ampersand) 
$$   $ (dollar sign) 
&nbsp;   Non-breaking space 
&shy;   Soft hyphen 

Â