关于strconv有时会少一个汉字的问题

WormJan 2010-10-13 10:11:38
在用inet往一个utf-8网站提交数据的时候
我发现一个问题,就是,当我提交的内容是字母和数字的时候,一切都是正常的。
如果我只提交带汉字的就会出现下列情况:

title=StrConv(UnicodeToUtf8("中华人民共和国"), vbUnicode)

这样,提交上去标题就是 中华人民共和

用别的方法提交的话不是乱码就是空。

请问这个问题该如何解决?麻烦给个代码。谢谢了。
...全文
121 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
WormJan 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
试试这个

VB code
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharSt……
[/Quote]
不好意思。结贴后我没再用这个方法。直接写入网站的数据库了。也没再过来看一下。有空的时候我先试一下。谢谢。
赵4老师 2010-10-14
  • 打赏
  • 举报
回复
试试这个
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, 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, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8 =65001
const cpGB2312 = 936
const cpGB18030=54936
const cpUTF7 =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
Dim bufSize As Long
bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
MultiByteToUTF16 = Space(bufSize)
MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
Dim bufSize As Long
Dim arr() As Byte
bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
ReDim arr(bufSize - 1)
WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

WormJan 2010-10-14
  • 打赏
  • 举报
回复
自己顶顶。还有人了解这方面的信息吗
熊孩子开学喽 2010-10-13
  • 打赏
  • 举报
回复
嗯,敏感字,所以被河蟹了.
WormJan 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alzeng 的回复:]
理解错误,与加什么汉字无关,就是说固定添加一个汉字到句尾即可。
[/Quote]
对,如果是奇数个汉字,就出问题。如果是偶数个,就正常。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
理解错误,与加什么汉字无关,就是说固定添加一个汉字到句尾即可。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
那就加一个一般用不到的字 龥 。
WormJan 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alzeng 的回复:]
在原字串后加一个空格试试……
[/Quote]
还是不行。要加的话,加上一个汉字的话才行。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
在原字串后加一个空格试试……
WormJan 2010-10-13
  • 打赏
  • 举报
回复
这是我这里的:

Function UnicodeToUtf8(ByVal UCS As String) As Byte()
Dim lLength As Long
Dim lBufferSize As Long
Dim lResult As Long
Dim abUTF8() As Byte
lLength = Len(UCS)
If lLength = 0 Then Exit Function
lBufferSize = lLength * 3 + 1
ReDim abUTF8(lBufferSize - 1)
lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UCS), lLength, abUTF8(0), lBufferSize, vbNullString, 0)
If lResult <> 0 Then
lResult = lResult - 1
ReDim Preserve abUTF8(lResult)
UnicodeToUtf8 = abUTF8
End If
End Function
WormJan 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wolfcapita 的回复:]
应该是你UnicodeToUtf8转的时候字节数少了
[/Quote]
谢谢。你有没有这方面的代码?能不能给我一份?
苍狼传说 2010-10-13
  • 打赏
  • 举报
回复
应该是你UnicodeToUtf8转的时候字节数少了
WormJan 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wallescai 的回复:]
嗯,敏感字,所以被河蟹了.
[/Quote]
所有汉字都是这样的。不是敏感字的原因。

1,502

社区成员

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

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