困扰好几个月,救命啊,Unicode转化问题,暴风雨,龙卷风,雷击闪。。。。快救救我呀 .#20013;#21326;#20219;#21629;国

sky9705 2005-04-21 04:35:29
问题:如何用VB 把Unicode读出来

我 CDN翻了好几遍了,还没有找到答案,VB里如何把unicode读出来那。
就比如最简单的一个字符串.#20013;#21326;#20219;#21629;国(中华人民共和国)
用strConv怎么也没有用,早在三年前我就对Constrv失望了,找不到其他办法,
我 很愚顿,不相信自己能解决这码制问题,希望各位大大帮帮我。
500分我都愿意,如果让我单独解决这问题,我要花一周时间去看档案啊,
帮我看看吧,只要把上面的字符串读到VB里就好了。。
...全文
142 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky9705 2005-04-21
  • 打赏
  • 举报
回复
如果能把所有有关字符操作的放在同一个帖子里,就很完美了
很省了大家很多时间
sky9705 2005-04-21
  • 打赏
  • 举报
回复
GB与BIG5内码转换COM原代码

www.itonline.gd.cn 2003-6-20


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



这个COM用到了一个VC的资源文件。就是字典。
大家可以去61.134.75.70/download/gb2big5.zip下载

原代码如下:

''//////////////////////////////////////////
''中文名称:GB与BIG5内码互换控件
''英文名称:GB2BIG5
''作者:Blood
''版本:1.0
''制作时间:2002.3.5
''版权所有 Blood 2002 - 2003
''//////////////////////////////////////////

Option Explicit

''定义变量
Dim BIG5Data As Variant
Dim GBData As Variant

''定义自定义类型,用来处理编码的高低字问题
Type ChineseTypeA
loChar As Byte
hiChar As Byte
End Type

Private BIG5Type(&HA1 To &HFF, &H40 To &HFE) As ChineseTypeA ''对应于BIG5字库
Private GBType(&HA7 To &HFF, &HA1 To &HFE) As ChineseTypeA ''对应与GB字库

''//////////////////
''公共函数开始
''//////////////////

''BIG5转换到GB的函数

Function BIG5TOGB(strSource As String) As String
Dim I As Long, Y As Long
''定义数组,用来存放BIG5和GB内码数据
Dim bteBIG5() As Byte
Dim bteGB() As Byte

''如果输入的内容为空,则退出函数
If strSource = "" Then
BIG5TOGB = ""
Exit Function
End If

''将BIG5数组的类型从Unicode编码转换为系统缺省码
bteBIG5 = StrConv(strSource, vbFromUnicode)
''确定BIG5数组的下标,用来循环将所有的BIG5内容转换为GB内码
Y = UBound(bteBIG5)
ReDim bteGB(0 To Y)
For I = 0 To Y
If I = Y Then
bteGB(I) = bteBIG5(I)
Exit For
End If
If bteBIG5(I) < &HA1 Or bteBIG5(I + 1) < &H40 Then
bteGB(I) = bteBIG5(I)
Else
bteGB(I) = BIG5Type(bteBIG5(I), bteBIG5(I + 1)).loChar
bteGB(I + 1) = BIG5Type(bteBIG5(I), bteBIG5(I + 1)).hiChar
I = I + 1
End If
Next I
''将系统缺省码转换为Unicode编码
BIG5TOGB = StrConv(bteGB, vbUnicode)
''重新初始化GB数组,以释放内存
Erase bteGB
End Function

''GB转换到BIG5的函数

Function GBTOBIG5(strSource As String) As String
Dim I As Long, Y As Long
''定义数组,用来存放BIG5和GB内码数据
Dim bteGB() As Byte
Dim bteBIG5() As Byte

''如果输入的内容为空,则退出函数
If strSource = "" Then
GBTOBIG5 = ""
Exit Function
End If

''将GB数组的类型从Unicode编码转换为系统缺省码
bteGB = StrConv(strSource, vbFromUnicode)
''确定GB数组的下标,用来循环将所有的BIG5内容转换为GB内码
Y = UBound(bteGB)
ReDim bteBIG5(0 To Y)

For I = 0 To Y
If I = Y Then
bteBIG5(I) = bteGB(I)
Exit For
End If
If bteGB(I) < &HA1 Or bteGB(I + 1) < &HA1 Then
bteBIG5(I) = bteGB(I)
Else
If bteGB(I) < &HB0 And bteGB(I + 1) >= &HA1 Then
bteBIG5(I) = GBType(bteGB(I) + 6, bteGB(I + 1)).loChar
bteBIG5(I + 1) = GBType(bteGB(I) + 6, bteGB(I + 1)).hiChar
Else
bteBIG5(I) = GBType(bteGB(I), bteGB(I + 1)).loChar
bteBIG5(I + 1) = GBType(bteGB(I), bteGB(I + 1)).hiChar
End If
I = I + 1
End If
Next I
''将系统缺省码转换为Unicode编码
GBTOBIG5 = StrConv(bteBIG5, vbUnicode)
''重新初始化BIG5数组,以释放内存
Erase bteBIG5
End Function

''//////////////////
''公共函数结束
''//////////////////

''类初始化
Private Sub Class_Initialize()
Dim I As Long
Dim J As Long
Dim iLen As Long

''从资源文件中读取GB与BIG5的字库
GBData = LoadResData(102, "CUSTOM") ''//读取GB字库
BIG5Data = LoadResData(101, "CUSTOM") ''//读取BIG5字库

For I = &HA1 To &HFE
For J = &H40 To &HFE
BIG5Type(I, J).loChar = BIG5Data(iLen)
BIG5Type(I, J).hiChar = BIG5Data(iLen + 1)
iLen = iLen + 2
Next J
Next I

iLen = 0

For I = &HA7 To &HFE
For J = &HA1 To &HFE
GBType(I, J).loChar = GBData(iLen)
GBType(I, J).hiChar = GBData(iLen + 1)
iLen = iLen + 2
Next J
Next I
End Sub



sky9705 2005-04-21
  • 打赏
  • 举报
回复
感谢楼上各位的回帖,为补充完这帖,我把原先的转Unicode程序转出来
这样就基本完整了。。
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

我的使用方法是把所有的输入进行保存前都转为unicode
公司有各种版本的系统,一直都烦不过来,感谢感谢!
flyingZFX 2005-04-21
  • 打赏
  • 举报
回复
VB本身就是Unicode的 只不过,都是在内存中操作,

在VB IDE环境里 是没有办法弄出来了,

不过运行起来显示的时候还是有办法的,

我们现在做的一个程序就是国际化的多语言版的程序,可以在任何语言环境下运行的,数据存储就使用Unicode的 SQL SERVER 里使用 Nvarchar 类型。

在英文操作系统下,显示英文, 韩文操作系统下,就显示韩文,中文操作下,就显示中文。
flyingZFX 2005-04-21
  • 打赏
  • 举报
回复
想显示Unicode就使用 VB里的 Microsoft Form 2.0 Object Library 控件组就OK了,

试试吧。
junwhj 2005-04-21
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3717/3717670.xml?temp=.2336695中的代码是VB.NET的,需要自己修改一下。
sky9705 2005-04-21
  • 打赏
  • 举报
回复
结帖,我会找个时间好好研究一下这编码
sky9705 2005-04-21
  • 打赏
  • 举报
回复
天,感谢各位啊,我真的好感激
flyingZFX 2005-04-21
  • 打赏
  • 举报
回复
这和你所使用的操作系统或VB的版本有关。
junwhj 2005-04-21
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3717/3717670.xml?temp=.2336695
flyingZFX 2005-04-21
  • 打赏
  • 举报
回复
呵呵,老问题了,
MmMVP 2005-04-21
  • 打赏
  • 举报
回复

AscW("中"), AscW("华"), AscW("人"), AscW("民"), AscW("共"), AscW("和"), AscW("国")
20013 21326 20154 27665 20849 21644 22269
MmMVP 2005-04-21
  • 打赏
  • 举报
回复
Chr 函数


返回 String,其中包含有与指定的字符代码相关的字符 。

语法

Chr(charcode)

必要的 charcode 参数是一个用来识别某字符的 Long。

说明

0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。charcode 的正常范围为 0 – 255。然而,在 DBCS 系统,charcode 的实际范围为 -32768 到 65535。

注意 ChrB 函数作用于包含在 String 中的字节数据。ChrB 总是返回一个单字节,而不是返回一个字符,一个字符可能是一个或两个字节。ChrW 函数返回包含 Unicode 的 String,若在不支持
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
Unicode 的平台上,则其功能与 Chr 函数相同。
Tiger_Zhao 2005-04-21
  • 打赏
  • 举报
回复
你的 Unicode 于字符数不配对嘿!

?chrw(20013),chrw(21326),chrw(20219),chrw(21629),chrw(22269)
中 华 任 命 国

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧