JS生成任意长度的随机汉字
最近突发奇想,想试试用编程方式请求百度来进行随机搜索,这就需要随机生成一窜汉字字符。经过网络上的一番搜索,发现可以用unicode编码来实现。
Unicode编码是16进制数,其中汉字对应范围是[\u4e00-\u9fa5],而4e00和9af5是16进制值。因此我们需要通过parseInt
转换,得到他们10进制的数值19968-40869,也就是下文中的start和end。
接着我们再随机生成start和end之间的一个数,然后将这个数转换成16进制,并用\u拼接起来,这样一个随机的代表汉字的Unicode编码就产生了。如果需要生成多个汉字,则直接使用for循环即可。最后用eval
输出一下生成的随机Unicode编码,就能得到一窜随机的汉字。
const createRandomChinese = (count:number) => {
const start = parseInt('4e00', 16)
const end = parseInt('9fa5', 16)
let name = ''
for(let i = 0; i < count; i++) {
const cha = Math.floor(Math.random() * (end - start))
name += '\\u' + (start + cha).toString(16)
}
return eval(`'${name}'`)
}
测试结果如下:
最后提一嘴,如何通过fetch对百度发起随机搜索请求。首先通过开发者模式,观察搜索过程中的网络请求,发现想通过编程方式对百度发起搜索请求,可以用fetch
发送GET请求:
fetch('https://www.baidu.com/s?wd=%E8%A1%A8%E7%A4%BA%E8%AE%BA&rsv_spt=1&rsv_iqid=0xe96276d80016e9b0&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug2=0&rsv_btype=i&inputT=1778&rsv_sug4=2384')
这里的wd
参数,就是我们搜索时输入的字符串。因此,上面我们有了随机的汉字字符串,想要借此发起随机搜索请求,就很容易了,直接这么写
const RandomSearch = (count:number) => {
const start = parseInt('4e00', 16)
const end = parseInt('9fa5', 16)
let name = ''
for(let i = 0; i < count; i++) {
const cha = Math.floor(Math.random() * (end - start))
name += '\\u' + (start + cha).toString(16)
}
let chinese = eval(`'${name}'`)
fetch(`https://www.baidu.com/s?wd=${chinese}&rsv_spt=1&rsv_iqid=0xe96276d80016e9b0&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug2=0&rsv_btype=i&inputT=1778&rsv_sug4=2384`)
.then((res)=>console.log(res))
}
不过这可能只能在控制台可以执行,不然会有跨域问题,在本文中就不多说了。
暂无评论,来发布第一条评论吧!