中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]VBS批量转换汉字unicode编码
作者:
标题: [已结]VBS批量转换汉字unicode编码 上一主题 | 下一主题
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『楼 主』:  [已结]VBS批量转换汉字unicode编码

前几天发过一个帖子求助汉字编码的问题。
----------------------------
大家知道,把下面这句代码中的空格去掉,帖到BBS上会变成汉字"我"。
&# 25105;
请问这个25105采用的是什么编码方式?
怎样在批处理中获取任意汉字的这种编码?
搜索了很久,没找到解决解决方案,望高人指点。
----------------------------
在slore兄的指点下知道了25105是汉字"我"的unicode编码,于是试着写了段VBS来批量转换汉字。
On Error Resume next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSrcFile = objFSO.OpenTextFile("C:\a.txt",1,True)
Set objDstFile = objFSO.OpenTextFile("C:\b.txt",2,True)

Do Until objSrcFile.AtEndOfStream
  text = objSrcFile.Read(1)
  if text <> "" then
    char = AscW(text)
  end if
  if char = "13" then
    objDstFile.Write ""
  elseif char = 10 then
    objDstFile.Write "<br>"
  else
    objDstFile.Write "&#"&char&";"
  end if
Loop

objSrcFile.close
objDstFile.close
Set objSrcFile = nothing
Set objDstFile = nothing
set objFSO = nothing
测试用例a.txt

  Quote:
我在测试汉字的unicode编码
换行测试

把b.txt的内容贴到BBS上显示如下

  Quote:
我在测&#-29739;汉字的uni&#99;ode编码<br>换&#-30644;测&#-29739;

大家可以看到,只要转换结果中有负值,贴到BBS上将无法正常显示汉字。请高人指点迷津。

[ Last edited by HAT on 2008-11-12 at 21:38 ]

2007-8-24 17:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  



  Quote:
'On Error Resume next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSrcFile = objFSO.OpenTextFile("C:\a.txt",1,True)
Set objDstFile = objFSO.OpenTextFile("C:\b.txt",2,True)

Do Until objSrcFile.AtEndOfStream
    text = objSrcFile.Read(1)
   
If text <> "" Then
        
char = AscW(text)
   
End If
    If
char < 0 Then char = char + 65536
    If Len(char) < 3 Then char = "0" & char
    If char = "013" Then
        
'objDstFile.Write ""
   
ElseIf char = "010" Then
        
objDstFile.Write "<br>"
    Else
        
objDstFile.Write "&#" & char & ";"
    End If
Loop

objSrcFile.Close
objDstFile.Close

Set
objSrcFile = Nothing
Set
objDstFile = Nothing
Set
objFSO = Nothing

结果:
我在测试汉字的unicode编码<br>换行测试

   此帖被 +4 点积分        点击查看详情   
评分人:【 HAT 分数: +4  时间:2007-8-27 14:49


2007-8-24 17:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

多谢slore兄
加分

有一点疑惑:
为何对回车换行符的处理要转换成013和010呢?直接用13和10来处理的话会有什么问题呢?
初学VBS,望指教。

2007-8-27 14:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

If Len(char) < 3 Then char = "0" & char
你没有发现你的unicode的c没有显示出来? c是99

没有正确的显示出来……所以我再小于3位的补了0,所以下面的相应的要
"013","010"……

2007-8-27 16:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

//你没有发现你的unicode的c没有显示出来? c是99没有正确的显示出来……所以我再小于3位的补了0

哦,原来如此,多谢了。
我在其他BBS测试的时候没有发现这个问题,可能每个BBS的处理不太一样吧。
再次感谢。

2007-8-27 21:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: