2011-08-12 42 views
0

我有一個問題,試圖將vb6中的某些變量的內容輸出到文本文件中。問題是,當擴展ASCII中的特殊字符顯示爲ä,ü時,它會在輸出中轉換爲匹配的基本ASCII字符,如a,u,a。爲什麼將ADODB.Stream與ASCII字符集特殊字符作爲ä轉換爲?

我試圖導出它像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 

謝謝!

+1

作爲參考,在這種情況下,「ascii」是指iso8859-1/codepage 1252. – Deanna

+0

有用的信息迪安娜,我想我可能混淆了字符集。我只是做了一個測試,我沒有選擇我認爲是基本ASCII的charset 20127(US-ASCII),然後輸出文件完全是空的。我認爲這證明我使用的是基本的ASCII而不是擴展的(1252),但是這個代碼頁是在區域設置中選擇的。也許我必須在代碼中強制它? – dajoropo

回答

2

兩個PRB: Charset Property of ADO Stream Object May Require Microsoft Internet Explorer UpgradeCharset Property (ADO)建議ADO字符集值是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」(該值都小寫-sensitive)表示7位ASCII,可能是本地化的。

使用UTF-8是一個壞主意,除非你想想要 UTF-8。儘管許多* nix系統假裝沒有區別,Stream將編寫BOM,當然這些擴展(非ASCII)字符是多字節編碼的。

+0

非常感謝!工作! :) – dajoropo

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 
+0

但是在我正在尋找的解決方案中,我需要能夠選擇enconding。上面的答案爲我工作。但是,謝謝你的答案! – dajoropo