vbs 에서 GB 2312 를 유 니 코드 로 변환 하 는 코드

오늘 아래 와 유사 한 프로그램 을 썼 습 니 다.
 
  
Dim http
Set http = CreateObject("msxml2.xmlhttp")
http.open "GET","http://www.sina.com.cn/",False
http.send
WScript.Echo http.responseText

하지만 돌아 오 는 중국어 가 모두 난 장 판 이라는 것 을 알 게 되 었 습 니 다. 시 나 닷 컴 의 인 코딩 이 gb 2312 의 땀 이라는 것 을 알 게 되 었 습 니 다. 지금 은 utf - 8 인 코딩 의 시대 입 니 다.response Text 는 utf - 8 인 코딩 을 잘 지원 하지만 gb 2312 인 코딩 이 라면 어 지 러 운 코드 로 돌아 가 고 잘못 보고 할 수도 있 습 니 다.어 쩔 수 없 이 response Body 를 사용 한 후에 스스로 코드 를 바 꿀 수 밖 에 없 었 다.
 
  
Dim http
Set http = CreateObject("msxml2.xmlhttp")
http.open "GET","http://www.sina.com.cn/",False
http.send
WScript.Echo GB2312ToUnicode(http.responseBody)

그래서 GB 2312 ToUnicode 함 수 를 직접 써 야 합 니 다. ado 로 쉽게 실현 할 수 있 습 니 다.
 
  
Function GB2312ToUnicode(str)
With CreateObject("adodb.stream")
.Type = 1 : .Open
.Write str : .Position = 0
.Type = 2 : .Charset = "gb2312"
GB2312ToUnicode = .ReadText : .Close
End With
End Function

이렇게 돌아 오 는 것 은 VBS 문자열 의 기본 유 니 코드 인 코딩 입 니 다. 그러나 ado 로 귀신 이 곡 할 노 릇 인 VBS 수준 을 표시 할 수 없어 서 '알고리즘' 에 따라 다시 썼 습 니 다.
 
  
Function GB2312ToUnicode(str)
length = LenB(str) : out = ""
For i = 1 To length
c = AscB(MidB(str,i,1))
If c <= 127 Then
out = out & Chr(c)
Else
i = i + 1
d = Hex(AscB(MidB(str,i,1)))
c = "&H" & Hex(c) & d
out = out & Chr(c)
End If
Next
GB2312ToUnicode = out
End Function

안 타 깝 게 도 효율 이 낮 으 니 조련 사로 하 자.
원문:http://demon.tw/programming/vbs-gb2312-unicode.html

좋은 웹페이지 즐겨찾기