高分求答,不用 StrConv 函数怎么将得到字符的 UNICODE ?

sss2002 2004-07-12 09:16:10
急!!!

请高手帮忙!

用 StrConv("",vbUnicode)可以得到 Unicode ,但现在不可以用 StrConv 函数(不要问我为什么不用这个函数),那么该怎么做?
...全文
236 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky9705 2005-04-21
  • 打赏
  • 举报
回复
是的,所有汉字的 UTF-8 都是3个字节,只有 utf-16 才是2个字节,StrConv 只支持 utf-16,不支持 utf-8

..............................................

真是这样马?unicode问题困扰我一年了,所有的贴子我都看过了。。
orwell 2005-02-18
  • 打赏
  • 举报
回复
mark
rainstormmaster 2004-07-13
  • 打赏
  • 举报
回复
//UTF8_Encode = StrConv(b, vbUnicode)
这是将ansi转化为unicode,你确定是需要这个吗?
sss2002 2004-07-13
  • 打赏
  • 举报
回复
是的,所有汉字的 UTF-8 都是3个字节,只有 utf-16 才是2个字节,StrConv 只支持 utf-16,不支持 utf-8

所以我要不用 StrConv 函数的方法转 unicode
kmzs 2004-07-13
  • 打赏
  • 举报
回复
老大在就值得收藏了
rainstormmaster 2004-07-13
  • 打赏
  • 举报
回复
这里有个模块,应该可以满足你的要求:
http://www.netpadd.com/source.php?topic=modInCodePage.bas
sss2002 2004-07-12
  • 打赏
  • 举报
回复
//另外,最后还是用这个来转换 UTF-8 的
UTF8_Encode = StrConv(b, vbUnicode)

这个不用StrConv一样可以实现



我就是要不用 StrConv 实现的代码啊!!!
rainstormmaster 2004-07-12
  • 打赏
  • 举报
回复
//ByVal strUnicode As String
不是要用 Byte 吗?

最好用byte,其实上面的这段是一个老外写的,我没细看

//另外,最后还是用这个来转换 UTF-8 的
UTF8_Encode = StrConv(b, vbUnicode)

这个不用StrConv一样可以实现
sss2002 2004-07-12
  • 打赏
  • 举报
回复
另外,最后还是用这个来转换 UTF-8 的

UTF8_Encode = StrConv(b, vbUnicode)

唉!!!
sss2002 2004-07-12
  • 打赏
  • 举报
回复
Public Function UTF8_Encode(ByVal strUnicode As String) As String


?????????????????????????????????



ByVal strUnicode As String

不是要用 Byte 吗?
sss2002 2004-07-12
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0) 老大,我先调试看看,如果OK,马上结帖,所有人都有分,感谢大家。本回帖以下的都没有分。

另外,另外哪个问题一并结贴, rainstormmaster(暴风雨 v2.0) 你知道的,呵呵
Chice_wxg 2004-07-12
  • 打赏
  • 举报
回复

原来如此。那么我的方法就别用了。对汉字编换出来不是Unicode编码 ^_^

rainstormmaster 2004-07-12
  • 打赏
  • 举报
回复
是要将utf-8转换为unicode吧?是的话,参考:
'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
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
sss2002 2004-07-12
  • 打赏
  • 举报
回复
哇,回答问题的大哥,好多是星星的啊!真是荣幸!!!
sss2002 2004-07-12
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0)

正确,但是我就是不知道该怎么用,大哥好心,给我完整的代码吧。


Chice_wxg(学)(习)
不用的原因是因为所有汉字的 UTF-8 都是3个字节,只有 utf-16 才是2个字节,StrConv 只支持 utf-16,不支持 utf-8


flyingscv(zlj)
拜托,我说了不能用这个了啊
rainstormmaster 2004-07-12
  • 打赏
  • 举报
回复
正确的答案应该是调用api函数MultiByteToWideChar
gdami 2004-07-12
  • 打赏
  • 举报
回复
AscW 返回字符串第一个字符的 Unicode 字符代码。
ChrW 返回包含指定 Unicode 字符代码的字符串。

ChrW (AscW("h"))
Chice_wxg 2004-07-12
  • 打赏
  • 举报
回复

另外我真的很想知道,为什么不用StrConv ?

Chice_wxg 2004-07-12
  • 打赏
  • 举报
回复
嘿嘿,其实真的可以哦!

Private Sub Form_Load()
Dim b() As Byte
Dim s As String
s = "AB"
b = s
Debug.Print b(0), b(1), b(2), b(3)
End Sub



flyingscv 2004-07-12
  • 打赏
  • 举报
回复
可以使用StrConv 函数吧 :)
加载更多回复(1)

7,763

社区成员

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

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