设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2748|回复: 1
打印 上一主题 下一主题

Utf-8与ANSI编码格式互相转换

[复制链接]

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

跳转到指定楼层
楼主
发表于 2012-5-3 19:53:03 |只看该作者 |倒序浏览
本帖最后由 sky_yx 于 2015-12-30 14:23 编辑
  1. Option Explicit
  2. 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
  3. Private Const CP_UTF8 = 65001
  4. '读文件至变量
  5. Private Function GetFile(FileName As String) As String
  6. Dim i As Integer, BB() As Byte
  7.     If Dir(FileName) = "" Then Exit Function
  8.     i = FreeFile
  9.     ReDim BB(FileLen(FileName) - 1)
  10.     Open FileName For Binary As #i
  11.     Get #i, , BB
  12.     Close #i
  13.     GetFile = BB
  14. End Function
  15. '功能: 把Utf8字符转化成ANSI字符
  16. Public Function UTF8_Decode(FileName As String) As String
  17. Dim sUTF8 As String
  18. Dim lngUtf8Size As Long
  19. Dim strBuffer As String
  20. Dim lngBufferSize As Long
  21. Dim lngResult As Long
  22. Dim bytUtf8() As Byte
  23. Dim n As Long
  24.     sUTF8 = GetFile(FileName)
  25.     If LenB(sUTF8) = 0 Then Exit Function
  26.     On Error GoTo EndFunction
  27.     bytUtf8 = sUTF8
  28.     lngUtf8Size = UBound(bytUtf8) + 1
  29.     lngBufferSize = lngUtf8Size * 2
  30.     strBuffer = String$(lngBufferSize, vbNullChar)
  31.     lngResult = MultiByteToWideChar(CP_UTF8, 0, bytUtf8(0), _
  32.             lngUtf8Size, StrPtr(strBuffer), lngBufferSize)
  33.     If lngResult Then
  34.         UTF8_Decode = Left(strBuffer, lngResult)
  35.     End If
  36. EndFunction:
  37.   
  38. End Function
复制代码
二、调用举例:
如果你想把一个"c:\1.txt"的UTF-8文件转换为ANSI编码,可这样调用
dim s as string
s=UTF8_Decode("c:\1.txt") '文件名请根据实际修改
此时,s存放的就是ANSI格式编码了,不会出现乱码问题锦葵科
   下面的是ansi转换utf-8
  1. Private Sub Command4_Click()s = "C:\Documents and Settings\Administrator\桌面\素材\2.xml"
  2. ToUtf8 s, "c:\ab.xml"
  3. MsgBox "ok"
  4. End Sub
  5. Private Sub ToUtf8(ByVal s As String, ByVal FilePath As String)
  6. Dim stmStr
  7. Set stmStr = CreateObject("ADODB.Stream")
  8. stmStr.Open
  9. stmStr.Charset = "utf-8"
  10. stmStr.WriteText s
  11. stmStr.SaveToFile FilePath
  12. stmStr.Close
  13. Set stmStr = Nothing
  14. End Sub
复制代码


分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分
你老婆要生了。我要当爹了

16

主题

0

好友

216

积分

中级会员

Rank: 3Rank: 3

生肖
性别

最佳新人 论坛元老

沙发
发表于 2012-5-4 17:59:29 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:23 编辑

我顶你

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-22 19:52 , Processed in 0.118774 second(s), 26 queries .

回顶部