2011-08-12 2 views
0

vb6의 일부 변수 내용을 텍스트 파일로 출력하는 데 문제가 있습니다. 것은 확장 ASCII의 특수 문자가 ä, ü,로 나타날 때 a, a, 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

Deanna를 잘 알고 있기를 바랍니다. 문자 세트를 혼동시킬 수 있습니다. 방금 테스트를했는데 기본 ASCII라고 생각되는 20127 (US-ASCII) 문자 집합의 선택을 취소하고 출력 파일이 완전히 비어 있습니다. 이것은 내가 확장 ASCII (1252) 대신에 기본 ASCII를 사용하고 있음을 증명하는 것으로 생각하지만,이 코드 페이지는 지역 설정에서 선택됩니다. 어쩌면 코드 안에 강제로 넣어야합니까? – dajoropo

답변

2
모두 PRB: Charset Property of ADO Stream Object May Require Microsoft Internet Explorer Upgrade

Charset 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. 

-sensitive)는 현지화 된 7 비트 ASCII를 의미합니다.

UTF-8이 아닌 한 UTF-8을 사용하는 것은 좋지 않습니다. 많은 * nix 시스템은 차이가 없다고 가장하는 반면, 스트림은 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