通过VBA的CreateTextFile方法创建ASCII文件:是否含扩展字符集?如何生成纯ASCII?
关于VBA创建纯ASCII文件的问题解答
你的判断是否正确?
正确。当你将CreateTextFile的第三个参数设为False时,创建的是**ANSI编码(Windows-1252)**的文件,这类编码包含ASCII(0-127)之外的扩展字符(128-255),所以öäüß这类非标准ASCII字符能被记事本正常显示,说明文件并非纯ASCII格式。纯ASCII仅包含0-127范围内的字符,超出这个范围的字符无法在纯ASCII文件中存储。
如何创建不含扩展字符集的纯ASCII文件?
有两种可行方案:
方案1:使用VBA原生的Open语句
Open语句默认以ASCII编码输出文件,非ASCII字符会被自动替换为问号(?)或合适的ASCII替代字符,确保文件仅包含0-127范围的字符:
Dim Path As String Path = "C:\somefolder\Textfile.txt" Open Path For Output As #1 Print #1, "Test öäüß" ' 非ASCII字符会被替换为?,最终输出"Test ????" Close #1
方案2:用FSO配合字符过滤函数
如果坚持使用FileSystemObject,需要手动过滤掉非ASCII字符,只保留0-127范围内的字符:
先定义过滤函数:
Function ToPureASCII(inputStr As String) As String Dim i As Integer Dim charCode As Integer Dim result As String result = "" For i = 1 To Len(inputStr) charCode = Asc(Mid(inputStr, i, 1)) ' 仅保留ASCII 0-127的字符 If charCode >= 0 And charCode <= 127 Then result = result & Mid(inputStr, i, 1) Else ' 非ASCII字符替换为?,也可改为空字符串 result = result & "?" End If Next i ToPureASCII = result End Function
然后调用函数写入文件:
Dim FSO As Object Dim TextFile As Object Dim Path As String Path = "C:\somefolder\Textfile.txt" Set FSO = CreateObject("Scripting.FileSystemObject") Set TextFile = FSO.CreateTextFile(Path, True, False) TextFile.WriteLine ToPureASCII("Test öäüß") ' 输出纯ASCII格式的"Test ????" TextFile.Close
内容的提问来源于stack exchange,提问作者Albin
相关产品推荐
相关产品推荐

