0

vb6 の一部の変数の内容をテキスト ファイルに出力しようとすると問題が発生します。問題は、拡張 ASCII の特殊文字が ä、ü、á として表示される場合、出力では、a、u、a などの一致する基本 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

前もって感謝します!

4

2 に答える 2

3

PRB: ADO Stream Object の Charset Property 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

出力:

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 システムは違いがないふりをしていますが、ストリームは BOM を書き込み、もちろんこれらの拡張 (非 ASCII) 文字はマルチバイトでエンコードされます。

于 2011-08-13T03:25:48.807 に答える
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
于 2011-08-12T12:24:00.630 に答える