VB6 - FileSystemObject Write Error : “invalid procedure call or argument”

3287 단어 VB+VBA
VB6에서 다음 방법으로 UTF-8 파일을 읽은 후 새 파일로 저장하는 중 "invalid procedure callor argument"오류가 발생했습니다.
읽기
     Dim adoS As Object      Set adoS = CreateObject("adodb.stream")      With adoS          .Charset = "utf-8"         .Type = 2          .Open          .LoadFromFile sUTF8File          ReadUTF8 = .ReadText          .Close      End With
'다른 파일 저장
    Dim fso As New FileSystemObject     Dim txtFile As TextStream          Set txtFile = fso.CreateTextFile(sFile, True)     txtFile.Write (strContent)     txtFile.Close
임시 해결 방법:
1, txt의 내용을 Word로 복사
2, Word의 모든 텍스트에서 반각 변환 기능(Aa 아이콘 아래: Change Case\Half-width)을 사용하여 반각 변환
3, Word 파일에서 변환된 텍스트 Copy를 원래 txt 파일에 저장합니다.
다시 업로드하면 됩니다.
또 다른 해결 방법:
다른 저장 파일을 사용하지 않고 읽은 String을 사용하여 문자열을 데이터로 바꾼 다음 데이터를 처리합니다.
 Dim oarrLine() As String
    oarrLine = Split(ReadUTF8, vbCrLf)
진정한 이유:
왜 오류가 발생했는지, 진정한 원인은 파일 내용에 특별한 문자가 있어서 파일을 쓸 때 오류가 발생했기 때문일 것이다.다음 예제:
https://stackoverflow.com/questions/17094281/getting-invalid-procedure-call-or-argument-in-vbscript
다음과 같은 해결 방법을 사용합니다.
>> f.close
>> Set f = goFS.CreateTextFile(".\tmp.txt", True, True) ' overwrite, unicode
>> f.WriteLine ChrW(&H1F00)
>>
>> --- no news are good news --
그러나 나온 파일은 UTF-8 파일이 아닌 유니코드 파일로 바뀝니다.
만약에 유니코드 방식으로 직접 처리하면 그 중 일부 중국어가 코드가 엉망이 되어 DB에 저장된 후에 데이터가 정확하지 않다는 것을 발견할 수 있다.
마지막 발견:
최종적으로 Notepad++의 Encoding\Convert to ANSI 를 사용한 후 빈 칸의 위치가 문제가 되었는지 확인할 수 있습니다. "?"또는 코드를 어지럽히면 이런 기록을 처리한 후에 정상적으로 처리할 수 있다.
마지막 마지막:
결국 VB6의 CreateTextFile 및 File입니다.write 방법이 너무 낡고 유행이 지났기 때문에 새로운 특수 문자를 처리할 수 없습니다. 업그레이드해서 사용하십시오.Net의 처리 방법은 사용자의 입력을 걱정하지 않고 근본적으로 문제를 해결할 수 있다.
보충:

UTF-8 GBK 전환의 비극: 특수 문자 C2A0


이 문제는 비교적 일찍 발생했다. 인상파에 전달된 작품 묘사 XML(GBK 인코딩)에서 일부 문자 정보는 자주 혼란스러운 코드를 포함하고 끝까지 혼란스러우며 심지어는 서로 다른 페이지의 혼란을 초래할 수도 있다.처음에는 줄곧 아무런 두서가 없었지만, 나중에 마침내 일부 두서가 발견되었다. GBK의 문자 집합이 너무 작고, 일부 특수한 문자에 대한 디코딩은 혼란스러울 수 있다. - 일부 생소한 글자는 그만두지만, 그 중에는 이 문자가 포함되어 있다. C2A0 - 하나는 웹 페이지에서 조판용 전각 공백을 자주 사용한다.바로 이 문자입니다. 사용자가 웹 페이지에서 텍스트를 복사하여 인터페이스에 정상적으로 표시하고 작품 XML 파일에 저장합니다. (UTF8 인코딩) 정상적으로 표시됩니다.그러나 작품을 업로드할 때 해당 XML 인코딩 형식을 GBK로 변환하여 디코딩이 발생했습니다... 처리 방법: 방법 1: 변환 시 텍스트 정보를 특수 처리하여 0×20이 0xC2A0을 대체합니다.메서드 2: 작품 XML 파일은 UTF8 인코딩으로 직접 전송됩니다.
방법은 머리가 아프면 머리가 아프고 발이 아프면 발을 치료하는 맛이 난다. 이 문제를 해결했지만 규범이 완벽하지 않다. - 많은 페이지가 그렇다.방법 2는 서버 지원이 필요하지만 이 문제를 완벽하게 해결할 수 있다.이전에 서버가 GBK로 인코딩한 이유는 GBK가 UTF8에 비해 공간을 절약했기 때문일 것이다. - 이런 하드디스크 공간이 충분하고 대역폭이 충분한 상황에서 절약한 그 정도의 물건은 무슨 소용이 있겠는가?
[java]  view plain
 copy
/** 
     *  
*줄 바꿈 공백(NO-BREAK SPACE, Unicode 0x00a0, UTF-8 인코딩: 0xC2A0)을 일반 공백으로 대체합니다. 
     *  
* 데이터베이스 문자 집합이 호환되지 않아 이 문자가 물음표로 바뀌는 것을 방지하는 데 사용됩니까?상황 
     */  
  
    public static String nobreakSpaceToSpace(String str) {  
        if (str == null) {  
            return null;  
        }  
        char nbsp = 0x00a0;  
        return str.replace(nbsp, ' ');  
    }  

  • 좋은 웹페이지 즐겨찾기