VB6的UTF8编码解码
'UTF-8编码 Public Function UTF8Encode(ByVal szInput As String) As String Dim wch As String Dim uch As String Dim szRet As String Dim x As Long Dim inputLen As Long Dim nAsc As Long Dim nAsc2 As Long Dim nAsc3 As Long If szInput = "" Then UTF8Encode = szInput Exit Function End If inputLen = Len(szInput) For x = 1 To inputLen '得到每个字符 wch = Mid(szInput, x, 1) '得到相应的UNICODE编码 nAsc = AscW(wch) '对于<0的编码 其需要加上65536 If nAsc < 0 Then nAsc = nAsc + 65536 '对于<128位的ASCII的编码则无需更改 If (nAsc And &HFF80) = 0 Then szRet = szRet & wch Else If (nAsc And &HF000) = 0 Then '真正的第二层编码范围为000080 - 0007FF 'Unicode在范围D800-DFFF中不存在任何字符,基本多文种平面中约定了这个范围用于UTF-16扩展标识辅助平面(两个UTF-16表示一个辅助平面字符). '当然,任何编码都是可以被转换到这个范围,但在unicode中他们并不代表任何合法的值。 uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80) szRet = szRet & uch Else '第三层编码00000800 – 0000FFFF '首先取其前四位与11100000进行或去处得到UTF-8编码的前8位 '其次取其前10位与111111进行并运算,这样就能得到其前10中最后6位的真正的编码 再与10000000进行或运算来得到UTF-8编码中间的8位 '最后将其与111111进行并运算,这样就能得到其最后6位的真正的编码 再与10000000进行或运算来得到UTF-8编码最后8位编码 uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _ Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _ Hex(nAsc And &H3F Or &H80) szRet = szRet & uch End If End If Next UTF8Encode = szRetEnd Function'UTF-8解码(2-25更改,采用递归方法,可以对一串字符串解码,仅仅为演示此算法,请不要随意调用)'形式类如department=%E4%B9%B3%E8%85%BA'%E5%A4%96%E7%A7%91Public Function UTF8BadDecode(ByVal code As String) As String If code = "" Then Exit Function End If Dim tmp As String Dim decodeStr As String Dim codelen As Long Dim result As String Dim leftStr As String leftStr = Left(code, 1) If leftStr = "" Then UTF8BadDecode = "" Exit Function ElseIf leftStr <> "%" Then UTF8BadDecode = leftStr + UTF8BadDecode(Right(code, Len(code) - 1)) ElseIf leftStr = "%" Then codelen = Len(code) If (Mid(code, 2, 1) = "C" Or Mid(code, 2, 1) = "B") Then decodeStr = Replace(Mid(code, 1, 6), "%", "") tmp = c10ton(Val("&H" & Hex(Val("&H" & decodeStr) And &H1F3F))) tmp = String(16 - Len(tmp), "0") & tmp UTF8BadDecode = UTF8BadDecode & ChrW(Val("&H" & c2to16(Mid(tmp, 3, 4)) & c2to16(Mid(tmp, 7, 2) & Mid(tmp, 11, 2)) & Right(decodeStr, 1))) & UTF8BadDecode(Right(code, codelen - 6)) ElseIf (Mid(code, 2, 1) = "E") Then decodeStr = Replace(Mid(code, 1, 9), "%", "") tmp = c10ton((Val("&H" & Mid(Hex(Val("&H" & decodeStr) And &HF3F3F), 2, 3)))) tmp = String(10 - Len(tmp), "0") & tmp UTF8BadDecode = ChrW(Val("&H" & (Mid(decodeStr, 2, 1) & c2to16(Mid(tmp, 1, 4)) & c2to16(Mid(tmp, 5, 2) & Right(tmp, 2)) & Right(decodeStr, 1)))) & UTF8BadDecode(Right(code, codelen - 9)) Else UTF8BadDecode = Chr(Val("&H" & (Mid(code, 2, 2)))) & UTF8BadDecode(Right(code, codelen - 3)) End If End IfEnd Function'UTF-8解码(3-12更改,可以解多个字符串 可供正常使用)Public Function UTF8Decode(ByVal code As String) As String If code = "" Then UTF8Decode = "" Exit Function End If Dim tmp As String Dim decodeStr As String Dim codelen As Long Dim result As String Dim leftStr As String leftStr = Left(code, 1) While (code <> "") codelen = Len(code) leftStr = Left(code, 1) If leftStr = "%" Then If (Mid(code, 2, 1) = "C" Or Mid(code, 2, 1) = "B") Then decodeStr = Replace(Mid(code, 1, 6), "%", "") tmp = c10ton(Val("&H" & Hex(Val("&H" & decodeStr) And &H1F3F))) tmp = String(16 - Len(tmp), "0") & tmp UTF8Decode = UTF8Decode & UTF8Decode & ChrW(Val("&H" & c2to16(Mid(tmp, 3, 4)) & c2to16(Mid(tmp, 7, 2) & Mid(tmp, 11, 2)) & Right(decodeStr, 1))) code = Right(code, codelen - 6) ElseIf (Mid(code, 2, 1) = "E") Then decodeStr = Replace(Mid(code, 1, 9), "%", "") tmp = c10ton((Val("&H" & Mid(Hex(Val("&H" & decodeStr) And &HF3F3F), 2, 3)))) tmp = String(10 - Len(tmp), "0") & tmp UTF8Decode = UTF8Decode & ChrW(Val("&H" & (Mid(decodeStr, 2, 1) & c2to16(Mid(tmp, 1, 4)) & c2to16(Mid(tmp, 5, 2) & Right(tmp, 2)) & Right(decodeStr, 1)))) code = Right(code, codelen - 9) End If Else UTF8Decode = UTF8Decode & leftStr code = Right(code, codelen - 1) End If WendEnd Function'gb2312编码Public Function GBKEncode(szInput) As String Dim i As Long Dim startIndex As Long Dim endIndex As Long Dim x() As Byte x = StrConv(szInput, vbFromUnicode) startIndex = LBound(x) endIndex = UBound(x) For i = startIndex To endIndex GBKEncode = GBKEncode & "%" & Hex(x(i)) NextEnd Function'GB2312编码Public Function GBKDecode(ByVal code As String) As String code = Replace(code, "%", "") Dim bytes(1) As Byte Dim index As Long Dim length As Long Dim codelen As Long codelen = Len(code) While (codelen > 3) For index = 1 To 2 bytes(index - 1) = Val("&H" & Mid(code, index * 2 - 1, 2)) Next index GBKDecode = GBKDecode & StrConv(bytes, vbUnicode) code = Right(code, codelen - 4) codelen = Len(code) WendEnd Function'二进制代码转换为十六进制代码Public Function c2to16(ByVal x As String) As String Dim i As Long i = 1 For i = 1 To Len(x) Step 4 c2to16 = c2to16 & Hex(c2to10(Mid(x, i, 4))) NextEnd Function'二进制代码转换为十进制代码Public Function c2to10(ByVal x As String) As String c2to10 = 0 If x = "0" Then Exit Function Dim i As Long i = 0 For i = 0 To Len(x) - 1 If Mid(x, Len(x) - i, 1) = "1" Then c2to10 = c2to10 + 2 ^ (i) NextEnd Function'10进制转n进制(默认2)Public Function c10ton(ByVal x As Integer, Optional ByVal n As Integer = 2) As String Dim i As Integer i = x \ n If i > 0 Then If x Mod n > 10 Then c10ton = c10ton(i, n) + chr(x Mod n + 55) Else c10ton = c10ton(i, n) + CStr(x Mod n) End If Else If x > 10 Then c10ton = chr(x + 55) Else c10ton = CStr(x) End If End IfEnd FunctionVB6的UTF8编码解码的更多相关文章
- Qt Creator无法用“UTF-8”编码解码
在Qt Creator 里打开其他编辑器的代码时有时会提示: 无法用"UTF-8"编码解码 在文件上右键使用NotePad++编辑器打开: 选择->格式-&g ...
- 特殊字符(包括emoji)梳理和UTF8编码解码原理(转)
转自:https://www.jianshu.com/p/57c27d67a8a8 背景知识 emoji表情符号,是20世纪90年代由NTT Docomo栗田穣崇(Shigetaka Kurit)创建 ...
- javascript中的Base64.UTF8编码与解码详解
javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...
- JavaScript进行UTF-8编码与解码
JavaScript本身可通过charCodeAt方法得到一个字符的Unicode编码,并通过fromCharCode方法将Unicode编码转换成对应字符. 但charCodeAt方法得到的应该是一 ...
- Python8_关于编码解码和utf-8
关于编码:ASCII码是早期的编码规范,只能表示128个字符.7位二进制数表示 扩展ASCII码,由于ASCII码不够用,ASCII表扩充到256个符号,不同的国家有不同的标准:8位二进制数 Unic ...
- 编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8
什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...
- URI编码解码和base64
概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...
- [转]utf8编码原理详解
from : http://blog.csdn.net/baixiaoshi/article/details/40786503 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态 ...
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
随机推荐
- COGS2642 / Bzoj4590 [Shoi2015]自动刷题机
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 906 Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...
- [bzoj3223]文艺平衡树——splay
题意 你应当编写一个数据结构,支持以下操作: 反转一个区间 题解 我们把在数组中的位置当作权值,这样原序列就在这种权值意义下有序,我们考虑使用splay维护. 对于操作rev[l,r],我们首先把l- ...
- 链接加载文件gcc __attribute__ section
在阅读源代码的过程中,发现一个头文件有引用: /** The address of the first device table entry. */ extern device_t devices[] ...
- 内核中的多点触摸协议文档 Multi【转】
转自:http://www.arm9home.net/read.php?tid=24754 前段时间改写了一个GT801的内核驱动,仔细阅读 MT Event 上报的时候,发现这个驱动是针对 Andr ...
- suse更改root密码
http://blog.csdn.net/george188/article/details/5383013 在SUSE Linux环境下,进入单用户模式仍然需要密码,因此通过进单用户模式恢复root ...
- iOS设计模式 —— KVC
刨根问底KVC KVC 全称 key valued coding 键值编码 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性 ...
- servlet(1) - 手写第一个servlet程序 - 小易Java笔记
声明:如tomcat的安装目录为D:\Java\tomcat6,下面要根据tomcat的安装目录而定 1. 建立程序的文件结构 ==>找到tomcat的安装目录,在webapps目录下新建一个名 ...
- js的变量的有效域
function test(o) { var i=0; if(typeof o=="object") { var j=1; for(var k=0;k<10;k++) { c ...
- MATLAB求函数零点与极值
1. roots函数 针对多项式求零点(详见MATLAB多项式及多项式拟合) 2. fzero函数 返回一元函数在某个区间内的的零点. x0 = fzero(@(x)x.^2-3* ...
- Ubuntu-16.04安装Xdebug-2.2.5及相关介绍
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况.在日常开发中,我们会使用如 print_r() var_dump()等函数来进行调 ...