linux中文显示方框主因是字体未被对应渲染引擎识别:需用fc-cache -fv递归扫描并验证fc-list :lang=zh;java应用须配置$java_home/jre/lib/fonts/fallback;pillow/selenium需代码中显式指定绝对字体路径。

Linux生成图片时中文显示为方框,不是字体没装全,而是字体没被渲染引擎识别到。 单纯把.ttf文件丢进/usr/share/fonts目录下,不刷新缓存、不配置fallback、不验证lang匹配,90%的情况仍然乱码。
fc-cache -fv 必须加 -v 参数才真正生效
很多人执行fc-cache -f就以为完事了,但这个命令默认只扫描一级子目录,而中文字体常放在/usr/share/fonts/chinese/这种二级路径里。不加-v(verbose)参数,它甚至不会告诉你跳过了哪些目录。
- 必须用
fc-cache -fv,强制递归扫描所有子目录并输出日志 - 观察输出里是否有
chinese或你字体文件名出现,没有就说明没扫到 - 如果提示
failed to write cache,通常是权限问题,改用sudo fc-cache -fv - 执行完立刻跑
fc-list :lang=zh,只查中文语言支持的字体,别用fc-list全量输出干扰判断
Java应用(如Tomcat)要额外配jre/lib/fonts/fallback
系统级字体缓存对Java无效。JVM启动时只认$JAVA_HOME/jre/lib/fonts/下的字体,且默认不读fallback目录——除非你手动建好并放进去。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先确认Java路径:
echo $JAVA_HOME,常见路径如/usr/lib/jvm/java-11-openjdk-amd64 - 创建fallback目录:
sudo mkdir -p $JAVA_HOME/jre/lib/fonts/fallback - 把宋体、黑体等常用中文字体
.ttf文件复制进去:sudo cp /usr/share/fonts/chinese/*.ttf $JAVA_HOME/jre/lib/fonts/fallback/ - 给字体加可读权限:
sudo chmod 644 $JAVA_HOME/jre/lib/fonts/fallback/*.ttf - 重启Java进程,否则JVM不会重新加载字体列表
Python + Pillow / Selenium 渲染图片前必须指定字体路径
即使系统和Java都配好了,Pillow的ImageDraw.text()或Selenium截图仍可能出框——因为它们默认不走fontconfig,而是依赖代码里显式指定的字体路径。
- Pillow示例:
font = ImageFont.truetype("/usr/share/fonts/chinese/simhei.ttf", 24),路径必须绝对且可读 - Selenium无头模式下,
driver.save_screenshot()依赖系统渲染,但若页面用CSS指定了font-family: "SimSun",而该字体名未被fontconfig注册,就会回退到无中文的默认字体 - 验证字体名是否注册:
fc-list | grep -i simsun,输出应含simhei.ttf: SimHei这类信息,而非只显示文件路径 - 若
fc-list查不到字体名,说明fonts.conf没配好别名,临时解法是直接在CSS里用font-family: "Noto Sans CJK SC"这类已知注册名
最容易被忽略的是:不同工具链对“字体名”的解析逻辑完全不同。系统用fontconfig查family,Java查filename和fallback目录,Pillow只认truetype()传入的物理路径。三者缺一,中文就变方框。










