2012-11-24 13 views
2

을 사용하여 한자 : 불행하게도HTTP GET 내가 한자 "开奖 结果"(페이지 자체가 문자 집합 = "GB2312"로 인코딩), 아래가 포함 된 웹 페이지를 GET luasocket를 사용 luasocket

require "socket" 
host = '61.129.89.226' 
fileformat = '/fcopen/cp_kjgg_dfw.jsp?lottery_type=ssq&lottery_issue=%s' 
function getlottery(num) 
    c = assert(socket.connect(host, 80)) 
    c:send('GET ' .. string.format(fileformat, num) .. " HTTP/1.0\r\n\r\n") 
    content = c:receive('*l') 
    while content do 
    if content and content:find('开奖结果') then -- failed 
     print(content) 
    end 
    content = c:receive('*l') 
    end 
    c:close() 
end 

--http://61.129.89.226/fcopen/cp_kjgg_dfw.jsp?lottery_type=ssq&lottery_issue=2012138 
getlottery('2012138') 

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio 
> if string.find("This is 开奖结果", "开奖结果") then print("found!") end 
found! 
,536,913,632 : 나는 루아 유니 코드 문자를 발견 할 수있는 것을 알고

content:find('开奖结果') -- failed 

: 그것은 예상 문자와 일치하지 10

그러면 luasocket이 웹에서 데이터를 검색하는 방법이 원인 일 수 있습니다. 누군가 이것에 관해 약간의 불을 흘릴 수 있었느냐?

감사합니다.

답변

4

페이지가 GB2312로 인코딩되고 스크립트 (파일 자체)가 utf-8로 인코딩 된 경우 일치하는 방법이 없습니다. .find() 때문에 UTF-8 코드 지점을 찾을 것입니다, 그들은 같은 방식으로 인코딩되지 있기 때문에 그냥 ... 당신이 찾고있는 문자를 통해

  开 奖  结  果 
GB  bfaa bdb1 bde1 b9fb 
UTF-16 5f00 5956 7ed3 679c 
UTF-8 e5bc80 e5a596 e7bb93 e69e9c 
+0

감사 DDA를 밀어 것입니다, 그래서에 대해 일치하는 시도 UTF - 8로 인코딩 된 페이지, 그것은 acutally 작동합니다. 그래서 작동하려면 GB2312로 인코딩 된 페이지를 UTF-8로 변환해야합니다. 맞습니까? 그러한 작업에 사용할 수있는 라이브러리가 있는지 알고 있습니까? (나는 slnunicode에 대한 빠른 견해를 가지고 있는데, 번역 번역을 지원하지 않는 것 같다.) –

+0

사실, .find()는 utf-8로 인코딩 되었기 때문에 utf-8 코드 포인트를 찾는다. 동작은 스크립트의 인코딩에 따라 다릅니다. –

+1

실제로. 문자열 "开奖 结果"는 나머지 파일과 동일한 인코딩으로 인코딩됩니다. 명령 줄에서'hexdump -C myscript.lua'를 실행하여 직접 확인하십시오. 반면에,'content' 변수의 내용은 원본 HTML 페이지가 어떤 인코딩이던간에있을 것입니다. – dda