[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 窄口牛 于 2023-2-20 07:58 编辑

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码

TOP

先新建 再删除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

评分人数

TOP

  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
复制代码

TOP

本帖最后由 窄口牛 于 2023-1-10 09:51 编辑

打开方式左右不了哇,Linux下建的sh,肯定是utf8哇,空的确实是会没有区别?
事实证明空的缺数哟有问题
新建必须有内容才能确定。

TOP

  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

评分人数


QQ 20147578

TOP

有签名格式,是不是指BOM ?
如果是要无BOM的,那就随便建一个0字节的空文件就行了

关键在于软件以哪种方式打开,ANSI还是UTF-8

QQ 20147578

TOP

回复 1# 窄口牛


    能否提供一个你搜到的例子参考一下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表