VB6.0 如何将string 字符串转换成utf-8编码形式?

如题所述

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 Declare Function WideCharToMultiByte Lib "kernel32 " (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_ACP = 0 ' default to ANSI code page
Private Const CP_UTF8 = 65001 ' default to UTF-8 code page

'字符转 UTF8
Public Function EncodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long
nSize = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sData), -1, 0, 0, 0, 0) - 1
If nSize = 0 Then Exit Function
ReDim aRetn(0 To nSize - 1) As Byte
WideCharToMultiByte CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize, 0, 0
EncodeToBytes = aRetn
Erase aRetn
End Function

' UTF8 转字符
Public Function DecodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long
nSize = MultiByteToWideChar(CP_UTF8, 0, StrPtr(sData), -1, 0, 0) - 1
If nSize = 0 Then Exit Function
ReDim aRetn(0 To 2 * nSize - 1) As Byte
MultiByteToWideChar CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize
DecodeToBytes = aRetn
Erase aRetn
End Function

Private Sub Command1_Click()
Dim s As String
s = StrConv(EncodeToBytes("中文"), vbUnicode) '将utf编码的数组转VB可处理字符
MsgBox s
t = DecodeToBytes(StrConv(s, vbFromUnicode))
MsgBox t
End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-15
这种转换一般用于网页地址; 我不知道 Delphi 是不是有现成的函数, 用到了就写了一个.

//函数:
function ToUTF8Encode(str: string): string;
var
b: Byte;
begin
for b in BytesOf(UTF8Encode(str)) do
Result := Format('%s%%%.2x', [Result, b]);
end;

//测试:
var
str: string;
begin
str := '万一';
str := ToUTF8Encode(str);
ShowMessage(str); //%E4%B8%87%E4%B8%80
end;

为 "小月124" 写了个反向函数:
function ToUTF8Decode(const str: string): string;
var
List: TStrings;
tmpStr: AnsiString;
i: Integer;
begin
List := TStringList.Create;
ExtractStrings(['%'], ['%'], PChar(str), List);
SetLength(tmpStr, List.Count);
for i := 0 to List.Count - 1 do
Byte(tmpStr[i+1]) := StrToInt('$' + List[i]);
List.Free;
Result := UTF8Decode(tmpStr);
end;

{ 调用测试 }
procedure TForm1.FormCreate(Sender: TObject);
var
s1: AnsiString;
s2: WideString;
begin
s1 := '%E4%B8%87%E4%B8%80';
s2 := ToUTF8Decode(s1);
ShowMessage(s2); { 万一 }
end;
第2个回答  2013-07-15
这个问题太难啦不知道怎么回答

VB6.0 如何将string 字符串转换成utf-8编码形式?
Private Sub Command1_Click()Dim s As String s = StrConv(EncodeToBytes("中文"), vbUnicode) '将utf编码的数组转VB可处理字符 MsgBox s t = DecodeToBytes(StrConv(s, vbFromUnicode))MsgBox t End Sub

vb中如何将字符串转换为utf-8编码
UTF = UTF & "=" & Hex(((ZC \\ &H40) And &H1F) Or &HC0) & "=" & Hex((ZC And &H3F) Or &H80)Else UTF = UTF & "=" & Hex(((ZC \\ &H1000) And &HF) Or &HE0) & "=" & Hex(((ZC \\ &H40) And &H3F) Or &H80) & "=" & Hex((ZC And &H3F) + ...

vb 6.0 中 ,保存 text 内容 到C盘 ,为 utf-8编码 php文件
假设想保存的文本都在Text1文本框里面,以下代码需引用 MicroSoft ActiveX Data Objects 2.5 Library:Private Sub Command1_Click()Dim adostream As New ADODB.Stream With adostream .Type = adTypeText .Mode = adModeReadWrite .Charset = "utf-8".Open .Position = 0 .WriteText Text1.Tex...

VB6.0 DOMDocument获取编码为UTF-8的XML节点数据,“空格”转换成问号...
转换函数:Public Function File_get_contents(Path As String, Optional Unicode = "GB2312")Dim arrBinary() As Byte Open Path For Binary As #1 ReDim arrBinary(LOF(1) - 1)Get #1, , arrBinary()Close #1 File_get_contents = BytesToBstr(arrBinary, Unicode)End Function Public Functio...

如何解决 VB 获取UTF8 显示乱码的问题
VB6.0可声明一个Object 数据类型,使用它的Charset属性为"UTF8",可解决TextBox控件中UTF8文本显示乱码问题。 Object 数据类型,Object 变量存储为 32 位(4 个字节)的地址形式,其为对象的引用。利用 Set 语句,声明为 Object 的变量可以赋值为任何对象的引用。 Charset 属性,设置或者返回字体中所用字符集。 实现代码...

VB6.0 Base64编码问题
dim encode as string 以UTF-8编码形式创建“中国”文本 然后再调用ToBase64String去转换

如何解救 VB6.0 写的读取文本文件的程序在 Vista 下操作失效?
用“open --- input --- inputb”的方法,全文读入到一个 byte型的大数组,然后再通过 strConv 函数和 Cstr 函数的转换, 出现乱码。5, 用“open --- input --- input$”的方法,定长读入数百个字符到一个 定长的String变量,无论是否用 strConv 函数和 Cstr 函数的转换,都出现乱码。

VB6.0定义变量的问题
因为涉及中文,中文码是8bit双字节码。要用 unsigned char 或 TCHAR 型 字符数组。TCHAR 有对应 的 _tscanf 等函数。中文码 有 unicode *endian, UTF-*, GB,BIG5 等不同编码,查找时要转换。(有许多工作量)没问题,但是……最好别用!根据编程规则:不要用拼音命名变量,更不要用起汉字,用...

求VB将中文字符转换成相应的16进制编码的源代码
这个函数,可以用来生成任意字符的16进制码,Unicode和ANSI都支持:FunctionGetHex(ByValStr1AsString,IsANSIAsBoolean)AsString Dimb1()AsByte IfIsANSIThenb1=StrConv(Str1,vbFromUnicode)Elseb1=Str1 Dims1AsLong,n1AsLong,l1AsLong l1=LBound(b1)n1=UBound(b1)-l1+1 GetHex=Space(n1*2)For...

HTML中的 ·—“ 这种代码是什么? VB中怎么转换为正常显示?
HTML中的 · — “ 这种代码是什么? VB中怎么转换为正常显示? 1.这些符号是标签的字符表现形式,他们将会被浏览器编译为实体.2.& middot 编译后”是“ ·& ldquo 编译后是 “等等“.这些符号将被浏览器自行编译,无需特殊处理。3.但是你后台要处理的话,可以搜索一下vb字符串和实体互相转换...

相似回答