我在尝试将vb6中的某些变量的内容输出到文本文件时遇到问题。问题是,当扩展ASCII中的特殊字符显示为ä,ü,á时,它会在输出中转换为匹配的基本ASCII字符,如a,u,a。
我尝试将其导出为UTF-8,然后正确显示该字符,但我需要输出为ASCII。另外,对我来说看起来很奇怪,文件名通常可以包含这些字符(ä,ü,á...),而且没有替换。
这可能是因为“ASCII”字符集只是基本的而不是扩展的吗?也许是因为在Windows中配置了CodePages?我尝试了几个(德语,英语),结果相同。
这是我正在使用的代码:
Set fileStream = New ADODB.Stream
If Not fileStream Is Nothing Then
inputString = textPreAppend + inputString
fileStream.charSet = "ASCII"
fileStream.Open
fileStream.WriteText inputString
fileStream.Flush
fileStream.SaveToFile fileName, adSaveCreateOverWrite
fileStream.Flush
fileStream.Close
End If
Set fileStream = Nothing
提前致谢!
答案 0 :(得分:3)
PRB: Charset Property of ADO Stream Object May Require Microsoft Internet Explorer Upgrade和Charset Property (ADO)都表明ADO CharSet值是HKEY_CLASSES_ROOT\MIME\Database\Charset
下列出的值,但显然不是整个故事。
例如,两个值“ascii”和“us-ascii”在那里列为“iso-8859-1”的别名,但是在我的语言环境设置为美国英语时,它们就像一个7位ASCII MIME类型。他们几乎必须这样做,因为无论如何都没有提供任何其他请求7位ASCII编码。
这会产生您想要的结果:
Option Explicit
Private Sub Main()
Dim fileStream As ADODB.Stream
Dim inputString As String
Const FileName As String = "outputfile.txt"
Set fileStream = New ADODB.Stream
inputString = "The thing is that when a special character" & vbNewLine _
& "from extended ASCII appears as ä, ü, á it" & vbNewLine _
& "is transformed in the output to the matching" & vbNewLine _
& "basic ASCII char like a, u, a." & vbNewLine
With fileStream
.Type = adTypeText
.Charset = "iso-8859-1"
.Open
.WriteText inputString
.SaveToFile FileName, adSaveCreateOverWrite
.Close
End With
End Sub
输出:
The thing is that when a special character
from extended ASCII appears as ä, ü, á it
is transformed in the output to the matching
basic ASCII char like a, u, a.
我们必须假设要求“ascii”(这些值都是小写的,但显然不区分大小写)意味着7位ASCII,可能是本地化的。
除非你想要 UTF-8,否则使用UTF-8是一个坏主意。虽然许多* nix系统假装没有区别,但Stream会写一个BOM,当然那些扩展(非ASCII)字符是多字节编码的。
答案 1 :(得分:0)
为什么你不能做以下的事情?这对我来说没问题:
Dim FileNo As Integer
Dim strFile As String
strFile = "C:\Test.txt"
FileNo = FreeFile
Dim strVariable As String
strVariable = "some text with extended chars in: ÙÑáêôü"
Open strFile For Append As #FileNo
Print #FileNo, strVariable
Close #FileNo