【VB用XML实现在线翻译范例】

现在还是人类 2008-10-14 01:58:19
界面效果


Option Explicit
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_ACP = 0 ' default to ANSI code page
Private Const CP_UTF8 = 65001 ' default to UTF-8 code page

Public Function EncodeToBytes(ByVal sData As String) As String
Dim aRetn() As Byte, nSize As Long, ReturnStr As String, X As Long
nSize = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sData), -1, 0, 0, 0, 0) - 1
If nSize = 0 Then Exit Function
ReDim aRetn(0 To nSize - 1) As Byte
WideCharToMultiByte CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize, 0, 0
For X = LBound(aRetn) To UBound(aRetn)
ReturnStr = ReturnStr & "%" & String(2 - Len(Hex(aRetn(X))), "0") & Hex(aRetn(X))
Next X
Erase aRetn
EncodeToBytes = ReturnStr
End Function

Function Utf8ToUnicode(ByRef Utf() As Byte) As String
Dim lRet As Long
Dim lLength As Long
Dim lBufferSize As Long
lLength = UBound(Utf) - LBound(Utf) + 1
If lLength <= 0 Then Exit Function
lBufferSize = lLength * 2
Utf8ToUnicode = String$(lBufferSize, Chr(0))
lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
If lRet <> 0 Then
Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
End If
End Function

Private Sub Command1_Click()
Dim XMLObject As XMLHTTP, SendStr As String, TranslateType As String
Dim ReturnText As String, ReturnByte() As Byte
Dim StartStation As Long, EndStation As Long
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
TranslateType = Combo1.List(Combo1.ListIndex)
TranslateType = Right(TranslateType, 6)
TranslateType = Left(TranslateType, 5)

SendStr = "ei=UTF-8&fr=&lp=" & TranslateType & "&trtext=" & EncodeToBytes(Text1.Text)
XMLObject.Open "POST", "http://fanyi.cn.yahoo.com/translate_txt", False
XMLObject.setRequestHeader "Referer", "http://fanyi.cn.yahoo.com/translate_txt"
XMLObject.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
XMLObject.setRequestHeader "CONTENT-LENGTH", Len(SendStr)
XMLObject.send SendStr
ReturnByte = XMLObject.responseBody
Set XMLObject = Nothing

Select Case TranslateType
Case "en_zh", "ja_zh", "zh_ja": ReturnText = Utf8ToUnicode(ReturnByte)
Case "zh_en": ReturnText = StrConv(ReturnByte, vbUnicode)
End Select

StartStation = InStr(1, ReturnText, "<div id=""pd"" class=""pd"">")
StartStation = StartStation + Len("<div id=""pd"" class=""pd"">")
EndStation = InStr(StartStation, ReturnText, "</div>")
ReturnText = Mid(ReturnText, StartStation, EndStation - StartStation)
ReturnText = Trim(ReturnText)
ReturnText = Replace(ReturnText, "<br/>", vbCrLf)
ReturnText = Replace(ReturnText, "<dnt> </dnt>", "")
ReturnText = Replace(ReturnText, " ", " ")

Text2.Text = ReturnText
End Sub

Private Sub Form_Load()
Combo1.AddItem "英 → 汉[en_zh]"
Combo1.AddItem "汉 → 英[zh_en]"
Combo1.AddItem "日 → 汉[ja_zh]"
Combo1.AddItem "汉 → 日[zh_ja]"
Combo1.ListIndex = 0
End Sub


虽然功能是个小工能,但里面有讲述用XMLHTTP如何取得网页信息及UTF-8编码的转换。
希望能给想了解这方面的朋友一些帮助。

另外大家看看这个帖子的楼主,真是让人郁闷,我没想到还有这么懒得人,哎
http://topic.csdn.net/u/20081010/09/68f81bee-d09b-498e-9604-8aa96218aa59.html
[Quote=引用 10 楼 wuruijing 的回复:]
万分感谢lyserver朋友和SupermanKing 朋友,再提一个冒昧的要求,不知能否将程序发送到我的邮箱:wuruijing@sohu.com。谢谢!
[/Quote]
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SYSSZ 2008-10-14
  • 打赏
  • 举报
回复
牛!牛!牛!
现在还是人类 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jhone99 的回复:]
引用 1 楼 SupermanKing 的回复:
sf



自己jf

哈哈,支持
[/Quote]
是沙发好不好,呵呵
vbman2003 2008-10-14
  • 打赏
  • 举报
回复
在线翻译也可以利用网上的web services资源......
jhone99 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 SupermanKing 的回复:]
sf
[/Quote]


自己jf

哈哈,支持
vbman2003 2008-10-14
  • 打赏
  • 举报
回复
顶一个
fvflove 2008-10-14
  • 打赏
  • 举报
回复
怎么一个"牛"字了得
liguicd 2008-10-14
  • 打赏
  • 举报
回复
jf
现在还是人类 2008-10-14
  • 打赏
  • 举报
回复
sf
代码转载自:https://pan.quark.cn/s/a4b39357ea24 基于VHDL语言的24进制多功能数字钟 FPGA多功能数字钟设计 安装要求 本项目采用QuartusII9.0版本设计,非9.0版本打开可能会存在兼容性问题。 本项目选用FPGA器件为CycloneIII_EP3C40Q240C8 设计任务 设计一个24进制多功能数字电子钟,要求具备以下功能: (1)时钟显示:能够以十进制在7段数码管上显示“时”、“分”、“秒”、“十分之一秒”。 (2)校表功能:能够对时钟进行校正。 (3)启动/暂停功能:能够控制时钟的启动和暂停。 (4)一键清零功能:能够将时钟清零。 (5)整点报时功能:能够在整点时发出报时信号。 (6)闹钟功能:能够在设置的时间到达时发出闹钟信号。 顶层设计原理图如下: image 设计方案/设计原理及总体框图 设计实现思路: (1)计时功能。 计时功能主要由四个计数器模块共同构成,其中十分之一秒计时器为十进制计数、分,秒计时器为六十进制计数、小时计时器为二十四进制计数。 计时器之间采用进位信号进行串联。 (2)十进制7端数码管显示功能。 显示功能由译码器模块实现。 译码器模块的两个输入端分别为刷新端和数据端。 七个译码器的刷新端连接十分之一秒的周期脉冲信号。 而数据端连接计数器的输出端,用以将4位输出BCD码译码为7端数码管的七位显示信号。 (3)校表功能。 校表功能由二选一模块和校时模式选择器模块构成。 其中二选一模块用于连接下一级计时器模块的进位信号和手动按钮脉冲信号。 当控制信号为“0”时,二选一模块输出计时器模块的进位信号。 而当控制信号为“1”时,二选一模块输出手动按钮信号。 控制信号由校时模式选择器模块输出,校时模式选择器输出端连...

1,065

社区成员

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

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