VB6 - FileSystemObject Write Error : “invalid procedure call or 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, ' ');
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SendKeys.Send()에서 확인란을 확인하는 Wazap그대로 타이틀대로 SendKeys.Send() 메소드를 사용해 체크 박스를 체크하는 방법이 됩니다. 업무에서 사용하고 있는 Windows Form의 어플리케이션의 조작을 자동화하고 싶다고 하는 이야기가 있어, 여러 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.