VB中Unicode转UTF8
作者:admin 日期:2012-05-01
本来自己从来没用到过,小黑写FLASH音乐播放器时讨论到VB向FLASH发送歌曲名时显示成乱码,不管是ANSCII还是UNICODE发过去,FLASH上老是乱码,看来数据类型不对,当时猜想既然几种类型都失败,可能是字节型吧,找度娘问了下,VBGOOD上的大佬给出了代码,整理了:
- 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 String, ByVal lpUsedDefaultChar As Long) As Long
- 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 Const CP_UTF8 = 65001
- 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(LBound(Utf))), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
- If lRet <> 0 Then
- Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
- End If
- End Function
- 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
- Private Sub Command1_Click()
- Dim byt() As Byte
- byt = UnicodeToUtf8("测试")
- Debug.Print Hex(byt(0)) & Hex(byt(1)) & Hex(byt(2))
- Debug.Print Utf8ToUnicode(byt())
- End Sub
VB 窗体实现文件拖拽获取路径方法
作者:admin 日期:2012-05-01
VB 窗体实现文件拖拽,只需要将窗体的OLEDropMode 属性设置为1即可。同样在ListBox、TreeView、ListView……等控件都提供这个属性设置的。然后通过OLEDragDrop事件来获取拖放的文件路径即可。
- Private Sub Form_Load()
- Form1.OLEDropMode = 1
- End Sub
- Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
- For i = 1 To Data.Files.Count '逐个读取文件路径
- Debug.Print Data.Files(i)
- Next
- End Sub
完全转换UTF-8为GB2312的PHP函数
作者:admin 日期:2012-05-01
开始是用“$re=iconv("UTF-8","GB2312",$snoopy->results);”将utf8转换成gb2312,结果经常出错,到了一半就看不到后文了。后来用“$re=iconv("UTF-8","GB2312//IGNORE",$snoopy->results);”,加上了忽略错误,好了点,可以转换到底了!可是今天又发现,还是有部分网页无法转换。后来仔细研究发现原来iconv只能转换3字符的utf8码,如果需要全码转换需要另外写函数。
首先需要了解utf8的构成。
基础:
1、单独使用iconv函数只能转换GB2312字符,外文字符无法转换。
广告位