找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1986|回复: 3

[求助]怎么在LV中实现GB2312编码转换成汉字

[复制链接]
发表于 2005-5-12 21:22:22 | 显示全部楼层 |阅读模式
<>在LV中可以实现GB2312编码转换成汉字呢?</P>
发表于 2005-5-14 10:01:54 | 显示全部楼层
回复 顶

使用道具 举报

发表于 2005-5-13 02:12:09 | 显示全部楼层
用数据库!不过这只是初步想法,因为没有了解过对应关系,呵呵!
回复 顶

使用道具 举报

发表于 2005-5-14 09:18:57 | 显示全部楼层
解决中文显示问题的四种方法
WML是XML的一种应用,而XML的缺省编码是UTF-8,也就是Unicode的8位编码方式。如果不特殊说明,那么XML将认为采用的是UTF-8的编码方式。这就造成了一个问题,几乎所有的文档内容都采用了GB2312方式,数据库中也不例外。而Unicode和GB2312的编码有很大的不同,可以说根本不一样,这是造成乱码的主要原因。
任何编码方式,包括日文、韩文、希腊文、阿拉伯文等都能轻松转换成Unicode。如果使用Unicode,就可以在同一段文档中加入各种语言。虽然现有的应用软件很少采用Unicode,但Windows NT的内核却采用Unicode来处理字符。Unicode方式有两个吸引人的个性:独立且宽容。
如何解决这些问题,现在常用的有以下的四种方法。
<>直接采用UTF-8编码
这种方法无需多讲。如果内容可以轻易转换到UTF-8编码还需要什么呢?坏处是需要对内容要进行全面的转换,而且与现有的大多数应用不兼容。</P><>直接使用GB2132编码
这种方法也很简单,在编码声明时,标注采用GB2312编码方式,具体做法如:&lt;?xml version="1.0" encoding="GB2312"?&gt;。但是并不是所有终端都支持GB2132编码,仍然会出现乱码。
笔者做开发的时候就是采用这种办法解决中文问题。当时公司采用的是Motorola公司的网关,使用Motorola L2000www、Nokia 7110和Simens 3568i进行测试。结果都十分满意。
如果使用这样的页面在Nokia WAP Toolkit上直接进行测试,将会发现Nokia WAP Toolkit将对中文进行自动编码,只是按照半个字节进行处理。因此出来之后就变成乱码了。</P><>采用字符转换
其思想是用ASCII字符表现更大字符集中的字符。比如要展现希腊文的小写的alpha。alpha在Unicode的编码中是945,16进制就是3B1,于是写下“α”或者“α”显示的就是小写的“α”。只需要知道汉字的Unicode编码,将其转换成“&amp;#xXXXX;”的形式。用ASCII编码方式,任何平台都能处理,而且HTML也支持。但是这样就增加了文件长度。</P><P>配置应用服务直接输出UTF-8编码(适用于IIS)
在IIS的Response Object有一个属性CharSet,按微软的说法只要这么做就行:
&lt;% Response.Charset("UTF-8") %&gt;
这种方法,只适用于Windows NT下IIS的ASP编程。其他的平台和Web服务器就没有如此简单的方式。</P><P>
--------------------------------------------------------------------------------</P><P>GB2132转Unicode
Unicode的原理也很简单。使用“&amp;#x”加上ASCII码的数值文本再加“;”结尾。当然要注意的是:这里所指的ASCII数值并不是简单的内存数值(或者说是GB2132编码)。例如:“饱”字,在内存里面的数值是0xb1a5,而在Unicode映射表内是0x9971。请先看下面的一段小程序。在WML页面中混有英文和中文。中文是采用Unicode书写的。</P><P>
代码:--------------------------------------------------------------------------------
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1 //EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;
&lt;wml&gt;
    &lt;card id="main" title="Chinese"&gt;
        &lt;p&gt;
            T;&amp;#9971;
        &lt;/p&gt;
    &lt;/card&gt;
&lt;/wml&gt;
--------------------------------------------------------------------------------</P><P>对于英文字符可以使用Unicode方式,也可以不使用。那么Unicode编码如何获得呢?
如果使用手工方式,那么可以在“附件”中找到“Unicode映射表”。打开映射表,选择“宋体”和“CJK Unified Ideograph”,在里面可以找到很多中文字符的Unicode编码。随便拷贝一个到WML文件中,百试百灵!就是使用的时候不是很方便。
如果使用Visual Basic脚本语言编写服务端程序(例如:ASP),那么问题就简单多了。可以使用AscW这个函数来解决编码的问题。以下的几个编码函数就是这样做的。
如果使用Visual C&amp;C++编写服务端程序,那么必须使用到Windows的一个API函数:MultiButeToWideChar。这个函数可以实现Unicode的转换。
对于其他服务端脚本语言也应该有类似的函数。如果没有,那么就必须自己做一个转换工具,能把WML中的中文转换为Unicode。在MSDN提供的例子中有一个小的转换工具:Uconvert。但是好像不是很好用,不过可以研究里面的程序。在网络上有不少这样的实用小工具。</P><P>
--------------------------------------------------------------------------------</P><P>适用于ASP的转换程序
&lt;%=replace(Server.HTMLEncode(request.form("text")),chr(13)+chr(10),"&lt;BR&gt;")%&gt; &gt;
以下是您的UNICODE码:
&lt;textarea name="text" cols="40" rows="10"&gt;
&lt;%=Server.HTMLEncode(unicode(request.form("text")))%&gt;</P><P>第一个Basic程序</P><P>代码:--------------------------------------------------------------------------------
function unicode(str)</P><P>    for i = 1 to Len(str)
        c = Mid(str, i, 1)
        unicode = unicode &amp; "&amp;#x" &amp; Hex(AscW(c)) &amp; ";"
    next</P><P>end function
[CODE]</P><P>第二个Basic程序
[CODE]
function unicode(str)</P><P>    dim i,j,c,i1,i2,u,fs,f,p</P><P>    unicode=""
    p=""</P><P>    for i=1 to len(str)
        c=mid(str,i,1)
        j=ascw(c)
        if j&lt;0 then
            j=j+65536
        end if
        if j&gt;=0 and j&lt;=128 then
            if p="c" then
                unicode=" "&amp;unicode
                p="e"
            end if
            unicode=unicode&amp;c
       else
            if p="e" then
                unicode=unicode&amp;" "
                p="c"
            end if
            unicode=unicode&amp;"&amp;#"&amp;j&amp;";"
        end if
    next</P><P>end function
--------------------------------------------------------------------------------</P><P>
全部转换程序</P><P>代码:--------------------------------------------------------------------------------
&lt;%
    function unicode(str)</P><P>        dim i,j,c,i1,i2,u,fs,f,p</P><P>        unicode=""
        p=""
        for i=1 to len(str)
            c=mid(str,i,1)
            j=ascw(c)
            if j&lt;0 then
                j=j+65536
           end if
            if j&gt;=0 and j&lt;=128 then
                if p="c" then
                    unicode=" "&amp;unicode
                    p="e"
                end if
                    unicode=unicode&amp;c
            else
                if p="e" then
                    unicode=unicode&amp;" "
                    p="c"
                end if
                unicode=unicode&amp;"&amp;#"&amp;j&amp;";"
            end if
    next</P><P>end function</P><P>function cutline(str,linelen)</P><P>    dim i,j,c,k</P><P>    cutline=""
    j=0
    for i=1 to len(str)
        c=mid(str,i,1)
        if asc(c)&lt;0 or asc(c)&gt;127 then
            k=2
        else
            if asc(c)&lt;32 then
                k=0
                if asc(c)=13 then
                    j=0
                    cutline=cutline+"&lt;br/&gt;"+c
                    c=""
               end if
            else
                k=1
            end if
        end if
        j=j+k
        if j&gt;linelen*2 then
            cutline=cutline+"&lt;br/&gt;"+vbCrlf+c
            j=k
        else
            cutline=cutline+c
        end if
    next</P><P>end function</P><P>function convertsymbol(sStr)</P><P>    dim i,c</P><P>    convertsymbol=""
    for i=1 to len(sStr)
        c=mid(sStr,i,1)
        if c="&gt;" then
            convertsymbol=convertsymbol &amp; "&gt;"
        elseif c="&lt;" then
            convertsymbol=convertsymbol &amp; "&lt;"
        elseif c="'" then
            convertsymbol=convertsymbol &amp; "&amp;apos;"
        elseif c="""" then
            convertsymbol=convertsymbol &amp; """
        elseif c="&amp;" then
            convertsymbol=convertsymbol &amp; "&amp;"
        elseif c="$" then
            convertsymbol=convertsymbol &amp; "$$"
        else
            convertsymbol=convertsymbol &amp; c
        end if
    next</P><P>end function</P><P>function convertstring(sStr)</P><P>    dim strtemp,asctemp,c</P><P>    strtemp=""
    for i=1 to len(sStr)
        c=mid(sStr,i,1)
        asctemp=ascw(c)
        if (asctemp&gt;47 and asctemp&lt;58) or (asctemp&gt;64 and asctemp&lt;91) or (asctemp&gt;96 and asctemp&lt;123) then
            strtemp=strtemp &amp; c
        end if
    next</P><P>    convertstring=Lcase(strtemp)</P><P>end function
%&gt;</P>
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-28 17:05 , Processed in 0.027541 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表