ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 卧美吻花

[已解决]VBA更改txt文件“编码格式”为UTF-8?18楼附答谢文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-17 10:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这是一个转文本为UTF-8文件的例子。在另一个帖子里说过的。

Public 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
Public Const CP_UTF8 = 65001
Sub writetoUTF8()
    Dim strstr As String
    Dim bByte As Byte
    Dim lBufSize As Long
    Dim lRest As Long
    Dim bUTF8() As Byte
    Dim TLen As Long
   
    strstr = "大家好,这里是转换Unicode和UTF-8的代码."
   
    TLen = Len(strstr)
    lBufSize = TLen * 3 + 1
    ReDim bUTF8(lBufSize - 1)
    lRest = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strstr), TLen, bUTF8(0), lBufSize, vbNullString, 0)
    If lRest Then
        lRest = lRest - 1
        ReDim Preserve bUTF8(lRest)
        Open "c:\xfwen\excelhelp\UTF8try.txt" For Binary As #1
        bByte = 239
        Put #1, , bByte
        bByte = 187
        Put #1, , bByte
        bByte = 191
        Put #1, , bByte
        Put #1, , bUTF8
        Close #1
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2006-12-17 11:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
还是复杂问题简单化吧:
已经使用excelVBA创建了一个文件"d:\mydata.txt"
但是这个文件是使用ANSI编码的
我需要将其改变成为使用UTF8编码的文件,文件名、内容都不变
请问如何写VBA代码?
Excel在导入txt文件时可选择打开文件的编码方式。

TA的精华主题

TA的得分主题

发表于 2006-12-19 20:49 | 显示全部楼层
实际上卧美吻花和我遇到的是同一个问题——不是从文本文件导入EXCEL,而是根据EXCE文件中的数据写一个xml文件。要求UTF-8编码。
winland兄的代码是管用的,虽然我还看不懂 ,仍要多谢。

TA的精华主题

TA的得分主题

发表于 2009-10-28 16:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

观感

呵呵,旧社会的贴子,仍然有看头!

TA的精华主题

TA的得分主题

发表于 2018-4-18 12:17 | 显示全部楼层
stanleypan 发表于 2006-11-8 16:45
用API就可以解决.就象是内码转换一样的道理.Private Declare Function MultiByteToWideChar Lib "kernel32" ...

亲测可用
2018年04月18日12时17分25秒

TA的精华主题

TA的得分主题

发表于 2018-4-18 12:22 | 显示全部楼层
northwolves 发表于 2006-11-7 11:15
Application.DefaultWebOptions.Encoding = msoEncodingUTF8

2018年04月18日12时21分54秒
亲测无效

TA的精华主题

TA的得分主题

发表于 2018-4-18 12:25 | 显示全部楼层
lotustower 发表于 2006-11-7 11:28
試試 轉化 UTF-8 Private Function GetUTF8String(s As String) As String    Dim i As Int ...

2018年04月18日12时25分36秒
亲测无用

TA的精华主题

TA的得分主题

发表于 2018-4-18 12:26 | 显示全部楼层
2018年04月18日12时26分25秒
完整代码
  1. 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
  2. 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
  3. Private Const CP_UTF8 = 65001

  4. Sub lksf()
  5.     Dim 文件名 As String
  6.     文件名 = "C:\Users\Administrator.USER-20171209CD\Desktop\新建文本文档.txt"
  7.     Const ForReading = 1, ForWriting = 2, ForAppending = 8
  8.     Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
  9.     Dim 对象_文件_1, 文件, 记事本
  10.     Set 对象_文件_1 = CreateObject("Scripting.FileSystemObject")
  11.     对象_文件_1.CreateTextFile 文件名     ' Create a file.
  12.     Set 文件 = 对象_文件_1.GetFile(文件名)
  13.     Set 记事本 = 文件.OpenAsTextStream(ForWriting, TristateUseDefault)     '以系统默认编码写入文件
  14.     For i = 1 To 1
  15.         记事本.Write UTF8_Encode("汉字a")
  16.     Next i
  17.     记事本.Close
  18. End Sub

  19. Public Function UTF8_Encode(ByVal Text As String) As String
  20.     Dim sBuffer As String
  21.     Dim lLength As Long
  22.     If Text <> "" Then
  23.         lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(Text), -1, 0, 0, 0, 0)
  24.         sBuffer = Space$(lLength)
  25.         lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(Text), -1, StrPtr(sBuffer), Len(sBuffer), 0, 0)
  26.         sBuffer = StrConv(sBuffer, vbUnicode)
  27.         UTF8_Encode = Left$(sBuffer, lLength - 1)
  28.     Else
  29.         UTF8_Encode = ""
  30.     End If
  31. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2021-11-17 10:40 | 显示全部楼层
x-xx-xx 发表于 2018-4-18 12:26
2018年04月18日12时26分25秒
完整代码

在win10+office2010的环境下代码不能用。
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_UTF8 = 65001


请问怎么解决上面的定义?

TA的精华主题

TA的得分主题

发表于 2021-11-17 14:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sjzhouah 发表于 2006-12-17 11:07
还是复杂问题简单化吧:已经使用excelVBA创建了一个文件"d:\mydata.txt"但是这个文件是使用ANSI编码的我需 ...

楼主的问题有解决了吗?麻烦分享一下,谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 11:28 , Processed in 0.042990 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表