S
SkillNav

用 fetch() HTTP Range 请求做二分搜索的 Unicode Explorer

资讯Simon Willison2026-02-27T17:50:54+00:003 分钟阅读
用 fetch() HTTP Range 请求做二分搜索的 Unicode Explorer

27th February 2026 - Link Blog

[用 fetch() HTTP Range 请求做二分搜索的 Unicode Explorer](https://tools.simonwillison.net/unicode-binary-search)。这是我今天早上用手机做的一个小原型,一方面是对 HTTP Range 请求的实验,另一方面也算是一个“用 LLM 满足好奇心”的通用示例。

我已经收集 [HTTP Range 技巧](https://simonwillison.net/tags/http-range-requests/) 有一段时间了,于是决定自己做点有意思的东西:对一个大文件进行二分搜索,完成一件真正有用的事。

所以我先 [和 Claude 做了头脑风暴](https://claude.ai/share/47860666-cb20-44b5-8cdb-d0ebe363384f)。难点在于找到一个适合二分搜索的用例——数据要能天然排序,这样二分法才能发挥优势。

Claude 的一个建议是:查询 unicode codepoints 的信息,这意味着要在数十 MB 的元数据里搜索。

我让 Claude 写了一份规范给 Claude Code——[在这里可以看到](https://github.com/simonw/research/pull/90#issue-4001466642)——然后在我的 [simonw/research](https://github.com/simonw/research) 仓库上,用 Claude Code for web 发起了一个[异步研究项目](https://simonwillison.net/2025/Nov/6/async-code-research/),把这份规范变成可运行代码。

这是最终产出的[报告和代码](https://github.com/simonw/research/tree/main/unicode-explorer-binary-search#readme)。我学到的一点很有意思:Range 请求技巧和 HTTP 压缩并不兼容,因为压缩会扰乱字节偏移的计算。我在 fetch() 调用里加了 'Accept-Encoding': 'identity',不过实际上这并非必须,因为 Cloudflare 和其他 CDN 在检测到 content-range header 时会自动跳过压缩。

我把结果部署到了[我的 tools.simonwillison.net 站点](https://tools.simonwillison.net/unicode-binary-search)。在部署前,我先做了调整:通过 Range 请求去查询一个启用了 CORS 的 76.6MB 文件,该文件位于 S3 bucket,并由 Cloudflare 作为前端。

这个 demo 玩起来很有意思——输入单个字符(例如 ø)或十六进制码点标识(例如 1F99C),它就会在大文件中执行二分搜索,并把每一步过程展示出来:

![一个名为 Unicode Explore 的 Web 工具动态演示。我输入了 and 符号并点击 Search。下方的框显示了一系列 HTTP 二分搜索请求:17 步找到结果,传输了 3,864 字节,并告诉我 and 符号是 U+0026,分类为 Punctuation other,位于 Basic Latin](https://static.simonwillison.net/static/2026/unicode-explore.gif)

原文链接:https://simonwillison.net/2026/Feb/27/unicode-explorer/#atom-everything

相关文章

资讯Simon Willison·3月3日
引用 Donald Knuth:Claude Opus 4.6 解出其研究数周的开放问题

Donald Knuth 表示,他最近在研究的一道开放问题,已被 Anthropic 的混合推理模型 Claude Opus 4.6 解出。该模型在三周前发布,这一结果促使 Knuth 重新审视自己对生成式 AI 的看法。他认为,这不仅验证了自己猜想的优美解法,也体现了自动推理与创造性解题能力的显著进展。

1 分钟
Gemini 3.1 Flash-Lite
资讯Simon Willison·3月3日
Gemini 3.1 Flash-Lite

原文仅包含标题“Gemini 3.1 Flash-Lite”,未提供正文内容或摘要信息。当前可确认的信息只有该主题名称,无法进一步提炼关键细节。若补充完整文章,我可继续提供完整中文翻译与更准确分类。

1 分钟