明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3788|回复: 15

[函数] [求助]用lisp调用vb把ANSI编码的文件转换成UTF-8

  [复制链接]
发表于 2010-8-22 21:30 | 显示全部楼层 |阅读模式
  1. Private Sub Command1_Click()
  2. Dim FileName As String, b() As Byte, S As String
  3. Dim ADO_Stream As Object
  4. FileName = App.Path & "\1.txt" '请修改为具体文件名
  5. If Dir(FileName) = "" Then Exit Sub
  6. ReDim b(FileLen(FileName))
  7. Open FileName For Binary As #1
  8. Get #1, , b
  9. Close #1
  10. S = StrConv(b, vbUnicode)
  11. Set ADO_Stream = CreateObject("ADODB.Stream")
  12. With ADO_Stream
  13. .Type = 2
  14. .Mode = 3
  15. .Charset = "utf-8"
  16. .open
  17. .WriteText S
  18. .SaveToFile FileName, 2
  19. End With
  20. Set ADO_Stream = Nothing
  21. MsgBox "文件转换完毕!"
  22. End Sub



上面是一段vb程序源码,可把ANSI编码的文件转换成UTF-8
可怜小弟太菜,不懂vb,只懂一点lsp
哪位老师可代为修改一下,让lsp调用
对话框就不用了,给出文件地址,自动转换就可以了,不用什么提示的
先谢谢了
发表于 2019-11-3 22:44 | 显示全部楼层
本帖最后由 xshrimp 于 2019-12-17 09:34 编辑

UTF-8编码的文件转换成ANSI
(xzj-file-WriteTextFile  "c:\\ansi.txt"   (xzj-file-ReadTextFile    "c:\\ansi.txt"  "utf-8")   "gb2312")

ANSI编码的文件转换成UTF-8

(xzj-file-WriteTextFile  "c:\\ansi.txt"   (xzj-file-ReadTextFile     "c:\\ansi.txt"  "gb2312")   "utf-8")


(defun xzj-file-ReadTextFile (File charset / encode filepath filestream)
  (if
    (and
      (setq FilePath   (findfile File))
      (setq FileStream (vlax-create-object "Adodb.Stream"))
    )
    (progn                        
      (vlax-put-property FileStream 'Type 2) ;1二进制读取 2文本模读取
      (vlax-put-property FileStream 'mode 3) ;1-读,2-写,3-读写
      (vlax-put-property FileStream 'charset charset)        ;unicode;utf-8;Ascii;gb2312;big5;gbk               
      (vlax-invoke FileStream 'Open)                        
      (vlax-invoke FileStream 'LoadFromFile filePath)                                
      (setq Encode (vlax-invoke FileStream 'readtext))
      (vlax-invoke FileStream 'close)
      (vlax-release-object FileStream)
      Encode
    )
  )
)(defun xzj-file-WriteTextFile (File charset str /  filestream)
;;;判断文件路径是否存在
(if (findfile (vl-filename-directory File))
     (if
          (setq FileStream (vlax-create-object "Adodb.Stream"))
          (progn                        
            (vlax-put-property FileStream 'Type 2) ;1二进制读取 2文本模读取
            (vlax-put-property FileStream 'mode 3) ;1-读,2-写,3-读写
            (vlax-put-property FileStream 'charset charset)        ;unicode;utf-8;Ascii;gb2312;big5;gbk               
            (vlax-invoke FileStream 'Open)
            (vlax-invoke FileStream 'WriteText str)                        
            (vlax-invoke FileStream 'SaveToFile File 2)
            (vlax-invoke FileStream 'flush)
            (vlax-invoke FileStream 'Close)                        
            (vlax-release-object FileStream)
            T                        
          )
      )
   (progn
     (princ "\n文件路径不存在,无法创建文件!")
      nil
   )   
)   
)


点评

(xzj-file-WriteTextFile "c:\\ansi.txt" "utf-8" (xzj-file-ReadTextFile "c:\\ansi.txt" gb2312"))  发表于 2020-2-25 23:58

评分

参与人数 2明经币 +3 金钱 +5 收起 理由
xyp1964 + 3 赞一个!
flowerson + 5 很给力!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2020-2-25 02:20 | 显示全部楼层
本帖最后由 wudechao 于 2020-2-25 02:25 编辑
xshrimp 发表于 2019-11-3 22:44
UTF-8编码的文件转换成ANSI
(xzj-file-WriteTextFile  "c:\\ansi.txt"   (xzj-file-ReadTextFile    "c:\\ ...

;我把它合并
;例如 (file-encode-trans  "c:\\ansi.txt"   "gb2312"    "utf-8")
(defun file-encode-trans (file charset1 charset2 / obj encode)
  (setq obj (vlax-create-object "ADODB.Stream"))
  (vlax-put-property obj 'type 2);1二进制读取 2文本模读取
  (vlax-put-property obj 'mode 3);1-读,2-写,3-读写
  (vlax-invoke obj 'open)
  (vlax-put-property obj "charset" charset1);;unicode;utf-8;ascii;gb2312;big5;gbk
  (vlax-invoke-method obj 'loadfromfile file)
  (setq encode (vlax-invoke obj 'readtext))
  (vlax-invoke obj 'close)
  (vlax-release-object obj)
  (setq obj (vlax-create-object "ADODB.Stream"))
  (vlax-put-property obj 'type 2);1二进制读取 2文本模读取
  (vlax-put-property obj 'mode 3);1-读,2-写,3-读写
  (vlax-invoke obj 'open)
  (vlax-put-property obj "charset" charset2);;unicode;utf-8;ascii;gb2312;big5;gbk
  (vlax-invoke obj 'writetext encode)
  (vlax-invoke-method obj 'savetofile file 2);1新建,2覆盖
  (vlax-invoke obj 'flush);将缓存中的数据强制输出
  (vlax-invoke obj 'close)
  (vlax-release-object obj)
)


发表于 2010-8-23 14:35 | 显示全部楼层
检查文件的编码
;;命令: (GPS->CHECKCODE "c:\\unicode big endian.txt")
;;"unicode big endian"
;;命令: (GPS->CHECKCODE "c:\\unicode.txt")
;;"Unicode"
;;命令: (GPS->CHECKCODE "c:\\utf-8.txt")
;;"UTF-8"
;;命令: (GPS->CHECKCODE "c:\\ansi.txt")
;;"GB2312"

(gps->WriteToFile  "c:\\utf8.txt"  "Str" "utf-8")
(gps->ReadFile     "c:\\ansi.txt" "gb2312")

转化文件编码
ANSI编码的文件转换成UTF-8
(gps->gtu  "c:\\ansi.txt")

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-8-23 18:30 | 显示全部楼层
太感谢了
发表于 2010-8-23 19:19 | 显示全部楼层
UTF-8编码的文件转换成ANSI
(gps->WriteToFile  "c:\\ansi.txt"   (gps->ReadFile     "c:\\ansi.txt"  "utf-8")   "gb2312")

ANSI编码的文件转换成UTF-8
(gps->WriteToFile  "c:\\ansi.txt"   (gps->ReadFile     "c:\\ansi.txt"  "gb2312")   "utf-8")
 楼主| 发表于 2010-8-23 22:50 | 显示全部楼层

再次感谢xshrimp,这个对我来说太重要了

发表于 2019-11-1 16:11 | 显示全部楼层
xshrimp 发表于 2010-8-23 19:19
UTF-8编码的文件转换成ANSI(gps->WriteToFile  "c:\\ansi.txt"   (gps->ReadFile  ...

不知可否提供源码下载?可以收点明经币都可以。
发表于 2019-11-4 01:15 | 显示全部楼层

非常谢谢xshrimp。xzj-file-WriteTextFile 里面的三参数顺序 File charset str 应该是File  str charset对吧?
发表于 2020-2-25 02:31 | 显示全部楼层
flowerson 发表于 2019-11-4 01:15
非常谢谢xshrimp。xzj-file-WriteTextFile 里面的三参数顺序 File charset str 应该是File  str charset ...

确实如此!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 03:35 , Processed in 1.058893 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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