加载中…
个人资料
玄雨清风
玄雨清风
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,889
  • 关注人气:36
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

将utf-8互转unicode(VB)

(2012-03-22 18:18:05)
标签:

it

分类: VB编程笔记

'Utf8 转换为 Unicode

Public Function UTF8_Decode(ByVal s As String) As String

Dim lUtf8Size As Long

Dim sBuffer As String

Dim lBufferSize As Long

Dim lResult As Long

Dim b() As Byte

If LenB(s) Then

On Error GoTo EndFunction

b = StrConv(s, vbFromUnicode)

lUtf8Size = UBound(b) + 1

On Error GoTo 0

'Set buffer for longest possible string i.e. each byte is

'ANSI<=&HFF, thus 1 unicode(2 bytes)for every utf-8 character.

lBufferSize = lUtf8Size * 2

sBuffer = String$(lBufferSize, vbNullChar)

'Translate using code page 65001(UTF-8)

lResult = MultiByteToWideChar(CP_UTF8, 0, b(0), _

lUtf8Size, StrPtr(sBuffer), lBufferSize)

'Trim result to actual length

If lResult Then

UTF8_Decode = Left$(sBuffer, lResult)

'Debug.Print UTF8_Decode

End If

End If

EndFunction:

End Function

'Unicode转换为UTF-8.

Public Function UTF8_Encode(ByVal strUnicode As String) As String 'ByVal strUnicode As Byte

Dim TLen As Long

TLen = Len(strUnicode)

If TLen = 0 Then Exit Function

Dim lBufferSize As Long

Dim lResult As Long

Dim b() As Byte

'Set buffer for longest possible string.

lBufferSize = TLen * 3 + 1

ReDim b(lBufferSize - 1)

'Translate using code page 65001(UTF-8).

lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strUnicode), _

TLen, b(0), lBufferSize, vbNullString, 0)

'Trim result to actual length.

If lResult Then

lResult = lResult - 1

ReDim Preserve b(lResult)

UTF8_Encode = StrConv(b, vbUnicode)

End If

End Function

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有