找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14771|回复: 7

[技术讨论] vbs如何创建一个utf-8无签名格式文本?(已解决)

[复制链接]
发表于 2023-1-9 07:07:55 | 显示全部楼层 |阅读模式
本帖最后由 窄口牛 于 2023-2-20 07:58 编辑

搜到的例子是utf-8有签名格式的。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-1-9 09:15:14 | 显示全部楼层
回复 1# 窄口牛


    能否提供一个你搜到的例子参考一下?
发表于 2023-1-9 17:06:31 | 显示全部楼层
有签名格式,是不是指BOM ?
如果是要无BOM的,那就随便建一个0字节的空文件就行了

关键在于软件以哪种方式打开,ANSI还是UTF-8
发表于 2023-1-9 22:05:05 | 显示全部楼层
  1. Function remove_utf8_BOM(ByVal file)
  2.     Dim oStream, s, i
  3.     Set oStream = CreateObject("ADODB.Stream")
  4.     oStream.Type = 1    'adTypeBinary
  5.     oStream.Mode = 3    'adModeReadWrite
  6.     oStream.Open()
  7.     With CreateObject("ADODB.Stream")
  8.         .Type = 1    'adTypeBinary
  9.         .Mode = 3    'adModeReadWrite
  10.         .Open()
  11.         On Error Resume Next
  12.         Err.Clear()
  13.         .LoadFromFile file
  14.         If Err.Number <> 0 Then remove_utf8_BOM = Err.Description : Exit Function
  15.         If .Size < 3 Then remove_utf8_BOM = "False" : Exit Function  'no utf-8 BOM
  16.         s = ""
  17.         For i = 0 To 2
  18.             s = s & Hex(AscB(.Read(1)))
  19.         Next
  20.         If s <> "EFBBBF" Then remove_utf8_BOM = "False" : Exit Function  'no utf-8 BOM
  21.         .Position = 3
  22.         .CopyTo oStream
  23.         .Close()
  24.     End With
  25.     Err.Clear()
  26.     oStream.SaveToFile file, 2    'adSaveCreateOverWrite
  27.     If Err.Number <> 0 Then remove_utf8_BOM = Err.Description : Exit Function
  28.     oStream.Close()
  29.     remove_utf8_BOM = "True"    'write file complete
  30. End Function
复制代码
这个用于去除utf-8文件的BOM

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-1-10 08:54:09 | 显示全部楼层
本帖最后由 窄口牛 于 2023-1-10 09:51 编辑

打开方式左右不了哇,Linux下建的sh,肯定是utf8哇,空的确实是会没有区别?
事实证明空的缺数哟有问题
新建必须有内容才能确定。
 楼主| 发表于 2023-1-10 09:25:57 | 显示全部楼层
  1. gangzi="1.txt"
  2. gangzi2="www.gangzi.org"
  3. Set Stm1 = CreateObject("ADODB.Stream")
  4. Stm1.Type = 2
  5. Stm1.Open
  6. Stm1.Charset = "UTF-8"
  7. Stm1.Position = Stm1.Size
  8. Stm1.WriteText gangzi2
  9. Stm1.SaveToFile gangzi,2
  10. Stm1.Close
  11. set Stm1 = nothing
复制代码
发表于 2023-1-10 13:13:55 | 显示全部楼层
先新建 再删除BOM
  1. var str = '批处理之家-http://bbs.bathome.net',
  2. path = 'a.txt',
  3. stream, newado;
  4. stream = WSH.CreateObject("ADODB.Stream");
  5. stream.type = 2;
  6. stream.charset = 'utf-8';
  7. stream.open();
  8. stream.writetext(str);
  9. stream.Position = 3;
  10. newado = WSH.CreateObject("ADODB.Stream");
  11. newado.Type = 1;
  12. newado.open();
  13. stream.CopyTo(newado);
  14. newado.SaveToFile(path, 2);
  15. stream.Close;
  16. newado.Close;
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-2-20 07:57:48 | 显示全部楼层
  1. Option Explicit

  2. Dim sTEXT,sFILE

  3. sFILE = "TEST_UTF8_NOBOM.TXT"
  4. sTEXT = "Сампле тест"

  5. Call WriteFileUTF8_NOBOM(sFILE,sTEXT)

  6. WScript.Echo(sTEXT)

  7. Private Sub WriteFileUTF8_NOBOM(sFILE,sTEXT)
  8.     Const adSaveCreateNotExist = 1
  9.     Const adSaveCreateOverWrite = 2
  10.     Const adTypeBinary = 1
  11.     Const adTypeText = 2
  12.     Const adModeReadWrite = 3

  13.     Dim oUTF8Stream,oBinaryStream
  14.     Set oUTF8Stream = CreateObject("ADODB.Stream")
  15.     Set oBinaryStream = CreateObject("ADODB.Stream")

  16.     oUTF8Stream.Type = adTypeText
  17.     oUTF8Stream.Charset = "utf-8"
  18.     oUTF8Stream.Open
  19.     oUTF8Stream.WriteText sTEXT
  20.     oUTF8Stream.Position = 3 ' Skip BOM

  21.     oBinaryStream.Type = adTypeBinary
  22.     oBinaryStream.Mode = adModeReadWrite
  23.     oBinaryStream.Open

  24.     oUTF8Stream.CopyTo oBinaryStream
  25.     oUTF8Stream.Flush
  26.     oUTF8Stream.Close

  27.     oBinaryStream.SaveToFile sFILE, adSaveCreateOverWrite
  28.     oBinaryStream.Flush
  29.     oBinaryStream.Close

  30.     Set oUTF8Stream = Nothing
  31.     Set oBinaryStream = Nothing
  32. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:10 , Processed in 0.022713 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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