JavaScriptJavaScript·

JS生成任意长度的随机汉字

发布时间:2024-08-28 11:15:56阅读量:37
专业文章
转载请注明来源

最近突发奇想,想试试用编程方式请求百度来进行随机搜索,这就需要随机生成一窜汉字字符。经过网络上的一番搜索,发现可以用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))
}

不过这可能只能在控制台可以执行,不然会有跨域问题,在本文中就不多说了。

评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

Vue3+Django实现保持登录状态

Request.session对象会自动生成一个cookie,该cookie名字默认为sessionoid,储存session的session_key值。当会话session过期后,该cookie将会自动消失。只有该cookie清空后,登录后的用户才能重新登录。 通过后端设置session的过期时间,时间到后,通过浏览器可以看到,cookie自动消失了。因此只需要设置,用户存在localStorage中的token值跟着cookie一起消失,就能够通过设置session的过期时间,来控制用户保持登录状态的时间,如七天免登录。 我们可能会认为其实可以根据cookie来控制登录状态,实际上想要在vue中操作cookie值是不容易。在JavaScript中,我们可以通过document.getElementId()之类的指令来控制cookie。但在vue中,使用document的指令很可能会得到空的返回值。因此,不能通过直接控制cookie的方法来实现控制登录状态。 因此,我们需要在后端多写一个接口,来检验token的有效性,从而控制用户的登录状态。 注意:cookie只会影响用户是否能够再 ...

在Nuxt 3中如何配置PrismJS和Autoloader插件?

在之前的文章Vue或Nuxt中如何渲染数学公式?中,我们讲解了如何在Nuxt.js中使用本地CDN渲染数学公式。通过本地CDN,我们可以很轻松的加载很多JavaScript库,且不用担心因此导致页面加载变慢。PrismJS是一个轻量的代码高亮JavaScript库,如果使用平常的方式配置PrismJS(参考如何使用Nuxt实现高亮代码块?),那么你想高亮的每一个语言几乎都需要引入一遍,比如说你想高亮Typescript,那么你需要添加import "prismjs/components/prism-typescript"。显然这很麻烦。然而,PrismJS有多个插件扩充了它的功能。Autoloader插件可以自动加载你需要的语言,让你不必再一个个的引入你需要高亮语言的文件。加载Autoloader插件最简单的方法是用CDN,在本文,我们将会讲解在Nuxt 3中,如何用加载Mathjax的同一种方法来配置PrismJS和它的autoloader插件。1. 首先从Github中下载PrismJS的源代码:https://github.com/PrismJS/prism/archive/re ...

Nginx安装后command not found

问题:我在我的Debian 12服务器上安装了nginx,安装过程完全按照官方文档Installing NGINX Open Source | NGINX Documentation。刚开始,一切正常,运行sudo nginx -v也正确返回了nginx的版本😇。但是最近我运行相同的命令,却给我返回command not found:sudo nginx sudo: nginx: command not found nginx bash: nginx: command not found无论是sudo nginx还是nginx都给我返回相同的结果😣。解决方案:想要解决这个问题,首先你需要确定nginx的安装路径。它可能安装在/usr/local/sbin 或 /usr/sbin中。一旦你找到你的nginx路径,比如/usr/local/sbin/nginx,直接运行sudo /usr/local/sbin/nginx -v nginx version: nginx/1.22.1就会输出nginx的版本,问题解决。如果你不想每次都输入nginx的完整路径,那么你必须根据下面的做法将ng ...

localStorage,sessionStorage和cookie的区别

我们可以将token和用户信息存进localStorage、sessionStorage或者cookies中,他们都是浏览器的数据存储方式。在使用浏览器的时候,打开开发者模式,点击应用程序,就能查看自己在该网站对应的LocalStorage、SessionStorage以及cookies中所存放的内容。LocalStorage、SessionStorage、Cookies的存储区别:LocalStorage没有生命周期,不会过期,需要“手动”删除。在浏览器发送请求时,LocalStorage中的数据不会被发送至后端服务器。LocalStorage所占用的空间较小。SessionStorage与LocalStorage类似,不同点在于SessionStorage有生命周期。关闭浏览器结束会话后,SessionStorage中的数据便会过期自动删除。SessionStorage所占用的空间较小。Cookies也是有生命周期的,它在过期后自动删除。同时,浏览器发送请求时,会同时将Cookies发送至后端服务器。Cookie所占用的空间较大。

pyttsx3运行错误

接上文Python实现语音朗读,运行示例代码时import pyttsx3 engine = pyttsx3.init() engine.say('开车不规范,亲人两行泪,I love China') engine.runAndWait()弹出以下错误:经过检查,pywin32等库都已经安装好了。尝试使用win32com库替代pyttsx3,结果仍然报错,报错内容为win32 api。之后又尝试了几种办法,仍然都是跟win32有关的报错。因为之前pip安装总是SSL报错,刚开始以为是SSL报错导致安装出错。但是修复SSL报错问题后(见Python pip安装SSL证书错误),该问题仍然没解决。最后经过了解,可能是pywin32版本过高所导致。一般需要将pywin32版本控制在305以下,可以使用225或者226这样的低版本。于是使用pip下载对应版本pip install pypiwin32 pip install pywin32 == 225然而,下载时发现已经没有225版本可以下载。因此另寻办法。最终,发现是pywin32安装的版本有问题,导致包虽然有了,但是却无法识别,导致出现N ...

大学毕业转行后的一点想法

最近成功把以前写的PDF格式的数学文章,几乎完美复刻到HTML网页上面,文章中的数学公式使用JS插件Mathjax渲染。之后会陆续更新到网站上,希望以后能让更多人无需下载就能看到,这也算给大学四年一个结尾。链接如下👇👇👇Note on arithmetic algebraic geometry, An introduction to different branches of mathematics, Note on perfectoid spaces, 代数几何简介​然后我目前只会把我以前留下的notes、introduction之类的弄成HTML这样网页的形式。至于我写的论文存arXiv上面就好了,谷歌搜也能搜到我的论文。目前来看,距离我论文完成也过去一年半了,并没有太多人对于推广perfect这一概念感兴趣。但值得一提的是,目前来看,我的工作更加受到老外的欣赏和认可,没有一个中国的Phd给我写过信,说看过我的文章。虽然关于perfect这一系列的工作没有全部完成,还可以继续深入耕耘,说不定还能多产出几篇论文吧,算下来我本科完成了4篇论文,有5篇未完成,总页数超过100页。但这一切 ...