2011-08-12 5 views
0

vb6の一部の変数の内容をテキストファイルに出力しようとすると、問題が発生します。これは、拡張ASCIIの特殊文字がä、ü、と表示されたときに、a、u、aのような一致する基本ASCII文字に変換されます。なぜASCII文字セットの特殊文字を使用するADODB.Streamをäのように変換するのですか?

私は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)の代わりに基本ASCIIを使用していることを証明していると思いますが、このコードページは地域設定で選択されています。たぶん私はそれをコードの中に強制しなければならないでしょうか? – dajoropo

答えて

2

両方PRB: Charset Property of ADO Stream Object May Require Microsoft Internet Explorer UpgradeCharset 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 

出力:

我々は明らかにケースではありませんけれども、「ASCII」を求めて(値はすべて小文字にすることを想定する必要が
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. 

-sensitive)は、おそらくローカライズされた7ビットのASCIIを意味します。

UTF-8を必要としない限り、UTF-8の使用は悪い考えです。多くの* nixシステムは違いはないと思っていますが、ストリームはBOMを書きますが、もちろん拡張された(非ASCIIの)文字はマルチバイトでエンコードされています。

+0

ありがとう!それはうまくいった! :) – dajoropo

0

なぜ次のようなことはできませんか?これは私のために[OK]を動作します:

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

関連する問題