标题: [已结]VBS批量转换汉字unicode编码
[打印本页]
作者: HAT
时间: 2007-8-24 17:20
标题: [已结]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
把b.txt的内容贴到BBS上显示如下
Quote: |
我在测&#-29739;汉字的unicode编码<br>换&#-30644;测&#-29739; |
|
大家可以看到,只要转换结果中有负值,贴到BBS上将无法正常显示汉字。请高人指点迷津。
[
Last edited by HAT on 2008-11-12 at 21:38 ]
作者: slore
时间: 2007-8-24 17:44
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>换行测试
作者: HAT
时间: 2007-8-27 14:38
多谢slore兄
加分
有一点疑惑:
为何对回车换行符的处理要转换成013和010呢?直接用13和10来处理的话会有什么问题呢?
初学VBS,望指教。
作者: slore
时间: 2007-8-27 16:00
If Len(char
) < 3
Then char
= "
0"
& char
你没有发现你的unicode的c没有显示出来? c是99
没有正确的显示出来……所以我再小于3位的补了0,所以下面的相应的要
"013","010"……
作者: HAT
时间: 2007-8-27 21:42
//你没有发现你的unicode的c没有显示出来? c是99没有正确的显示出来……所以我再小于3位的补了0
哦,原来如此,多谢了。
我在其他BBS测试的时候没有发现这个问题,可能每个BBS的处理不太一样吧。
再次感谢。