附vb的实现代码Public Function TextToUTF(ByVal sText As String) As Variant
'On Error Resume Next
Dim bUTF() As Byte
Dim lCode As Long, i As Long
Dim p As Long '数组当前位置
Dim iUTFLineLen As Integer 'UTF行长
Dim pUTFLine As Long '指向UTF行头部位置,以便记录长度
'先预留足够空间
ReDim bUTF(Len(sText) * 3 + 2)
p = 2
pUTFLine = 0
iUTFLineLen = 0
For i = 1 To Len(sText)
'If i Mod 100 = 1 Then Debug.Print i
lCode = AscW(Mid(sText, i, 1))
If lCode < 0 Then lCode = lCode + 65536
If lCode = 13 Then
'在该行头部填写本行长度
bUTF(pUTFLine) = iUTFLineLen \ 256
bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
'准备下行长度
iUTFLineLen = 0
'移动到下行位置
pUTFLine = p
'预留2字节空间,以便保存本行长度
p = p + 2
ElseIf lCode = 10 Then
'vbLf忽略
ElseIf lCode <= &H7F Then '0xxxxxxx
bUTF(p) = lCode
p = p + 1
iUTFLineLen = iUTFLineLen + 1
ElseIf lCode <= &H7FF Then '110xxxxx 10xxxxxx
bUTF(p) = &HC0 + (lCode \ 64)
bUTF(p + 1) = &H80 + (lCode Mod 64)
p = p + 2
iUTFLineLen = iUTFLineLen + 2
Else '1110xxxx 10xxxxxx 10xxxxxx
bUTF(p) = &HE0 + (lCode \ 4096)
bUTF(p + 1) = &H80 + (lCode Mod 4096) \ 64
bUTF(p + 2) = &H80 + (lCode Mod 64)
p = p + 3
iUTFLineLen = iUTFLineLen + 3
End If
Next
'最后一行的长度
bUTF(pUTFLine) = iUTFLineLen \ 256
bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
'重新定义正确长度的字节数组后返回
ReDim Preserve bUTF(0 To p - 1)
TextToUTF = bUTF
End Function
'On Error Resume Next
Dim bUTF() As Byte
Dim lCode As Long, i As Long
Dim p As Long '数组当前位置
Dim iUTFLineLen As Integer 'UTF行长
Dim pUTFLine As Long '指向UTF行头部位置,以便记录长度
'先预留足够空间
ReDim bUTF(Len(sText) * 3 + 2)
p = 2
pUTFLine = 0
iUTFLineLen = 0
For i = 1 To Len(sText)
'If i Mod 100 = 1 Then Debug.Print i
lCode = AscW(Mid(sText, i, 1))
If lCode < 0 Then lCode = lCode + 65536
If lCode = 13 Then
'在该行头部填写本行长度
bUTF(pUTFLine) = iUTFLineLen \ 256
bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
'准备下行长度
iUTFLineLen = 0
'移动到下行位置
pUTFLine = p
'预留2字节空间,以便保存本行长度
p = p + 2
ElseIf lCode = 10 Then
'vbLf忽略
ElseIf lCode <= &H7F Then '0xxxxxxx
bUTF(p) = lCode
p = p + 1
iUTFLineLen = iUTFLineLen + 1
ElseIf lCode <= &H7FF Then '110xxxxx 10xxxxxx
bUTF(p) = &HC0 + (lCode \ 64)
bUTF(p + 1) = &H80 + (lCode Mod 64)
p = p + 2
iUTFLineLen = iUTFLineLen + 2
Else '1110xxxx 10xxxxxx 10xxxxxx
bUTF(p) = &HE0 + (lCode \ 4096)
bUTF(p + 1) = &H80 + (lCode Mod 4096) \ 64
bUTF(p + 2) = &H80 + (lCode Mod 64)
p = p + 3
iUTFLineLen = iUTFLineLen + 3
End If
Next
'最后一行的长度
bUTF(pUTFLine) = iUTFLineLen \ 256
bUTF(pUTFLine + 1) = iUTFLineLen Mod 256
'重新定义正确长度的字节数组后返回
ReDim Preserve bUTF(0 To p - 1)
TextToUTF = bUTF
End Function
iconv转出来如何写成文件?已知
$s = "该书的相关说明";
//$u = gb2utf8($s);
$u = iconv("GB2312","UTF-8",$s);
echo $u;
$fp = fopen("test1", "w");
fwrite($fp,$u);
fclose($fp);这样是不行的。写出来对不上