ai didi

sockets - 使用luasocket HTTP GET汉字

转载 作者:行者123 更新时间:2023-12-03 11:51:16 24 4
gpt4 key购买 nike

我使用luasocket来获取一个包含中文字符“开奖结果”的网页(该页面本身编码为charset =“gb2312”),如下所示:

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如何从网络上检索数据。有人能对此有所启发吗?

谢谢。

最佳答案

如果页面是使用GB2312编码的,而脚本(文件本身)是使用utf-8编码的,则匹配将无法进行。因为.find()会查找utf-8代码点,并且只会在您要查找的字符上滑动,因为它们的编码方式不同...

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

关于sockets - 使用luasocket HTTP GET汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537579/

24 4 0
文章推荐: c - 监听 DNS 请求
文章推荐: asp.net - 如何从页面加载后的代码中设置ASP.NET标签文本?
文章推荐: hibernate - 如何在运行时覆盖 hibernate 获取策略
文章推荐: c - 在Windows中的套接字上使用fprintf
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com