2

以下のように、luasocket を使用して、中国語の文字 "开奖果" (ページ自体は charset="gb2312" でエンコードされています) を含む Web ページを取得します。

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')

残念ながら、期待される文字と一致しません。

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

Lua が Unicode 文字を検出できることは知っています。

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> if string.find("This is 开奖结果", "开奖结果") then print("found!") end
found!

それから、luasocket が Web からデータを取得する方法が原因である可能性があります。誰かがこれにいくつかの光を当てることができますか?

ありがとう。

4

1 に答える 1

4

ページが GB2312 でエンコードされていて、スクリプト (ファイル自体) が utf-8 でエンコードされている場合、一致は機能しません。.find()は utf-8 コードポイントを探し、探している文字の上をスライドするだけです。同じ方法でエンコードされていないためです...

          开    奖      结     果
GB      bfaa   bdb1   bde1   b9fb
UTF-16  5f00   5956   7ed3   679c
UTF-8   e5bc80 e5a596 e7bb93 e69e9c
于 2012-11-24T04:46:49.410 に答える