怎么查一款字有没有某个字
适合谁看:要确认一段文字(人名、地名、繁体、生僻字)能不能用某款字完整显示的用户和开发者。
不写代码:字体页查字
打开字体页,在「字符表 · 查字」里输入你要用的文字。字体里没有的字会用虚线框标出来。
写代码:读 CSS 的 unicode-range
网页字体包 CSS 里每条 @font-face 都有 unicode-range,列出这一片包含哪些字的编码。把一份 result.css 里所有 unicode-range 合在一起,就是这一子集能显示的全部字符。 不在里面的字,浏览器会用备用字体显示。
下面是一个 Python 示例,检查一段文字在某款字的 full 子集里缺哪些字:
import re, urllib.request
def covered(css_url):
req = urllib.request.Request(css_url, headers={"User-Agent": "Mozilla/5.0 (coverage-check)"})
css = urllib.request.urlopen(req, timeout=30).read().decode("utf-8")
cps = set()
for rng in re.findall(r"unicode-range:([^;}]+)", css):
for part in rng.split(","):
part = part.strip().upper().removeprefix("U+")
if "-" in part:
a, b = part.split("-")
cps.update(range(int(a, 16), int(b, 16) + 1))
elif part:
cps.add(int(part, 16))
return cps
url = "https://cn.windfonts.com/fonts-packages/xwwk/Regular/full/result.css"
text = "你要检查的文字"
have = covered(url)
print("缺字:", "".join(ch for ch in set(text) if ord(ch) not in have and not ch.isspace()))
要点:
-
请求时带上常见的
User-Agent,不带可能被拒绝(返回 403)。 -
查
full子集,结果就是整款字的覆盖;查zh-common等子集,结果只代表那个子集。 -
不同字重的覆盖可能不同,用到哪个字重就查哪个。
-
地址规则见《网页字体地址规则》。
缺字怎么办
- 换一款覆盖更全的字,或在 CSS 里写好备用字体。见《繁体、日文、生僻字显示成方框怎么办》。
- 字体缺字是字体本身的情况,文风不会替作者补字。