You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下如何将YAML读取的UTF-8路径用于os.path.isdir()?

UTF-8路径从yaml加载后os.path.isdir()返回False?看这篇解决

嘿,这个问题本质是文件读写时编码不统一导致的双重UTF-8编码,我来给你拆解清楚:

为啥会出现这个差异?

你写入config.yml的时候,明确加了encoding='utf-8',把路径里的ü正确转成了UTF-8字节\xc3\xbc;但读文件的时候没指定编码,Python就用了Windows系统的默认编码(一般是cp1252或者跟你系统区域相关的编码)来解码。

原本的\xc3\xbc(对应ü的UTF-8编码),被系统默认编码解码后,变成了两个字符:Ã和¼。等你再把这个错误的字符串转成UTF-8编码,就得到了\xc3\x83\xc2\xbc——这就是你看到编码不一样的原因。这个被“转码两次”的字符串,自然找不到实际存在的目录。

怎么解决?

很简单,读yaml文件的时候跟写入时保持编码一致,明确指定encoding='utf-8'就行:

from ruamel.yaml import YAML
import os

yaml = YAML()
# 关键:读取时指定utf-8编码
with open('config.yaml', encoding='utf-8') as cfg:
    user_data = yaml.load(cfg)
root_path = user_data['destination']['root_path']

# 现在再测就正常了
print(os.path.isdir(root_path))  # 应该返回True

验证一下

你可以再打印编码值确认:

print(root_path.encode('utf-8'))  # 现在会输出b'C:/Users/Name/Desktop/\xc3\xbc',和硬编码的结果完全一致

为啥硬编码就没问题?

硬编码的'C:/Users/Name/Desktop/ü',Python会直接按照你代码文件的编码(只要你代码文件是UTF-8,而且头部加了# -*- coding: utf-8 -*-)正确解析,不会有中间转码的错误,所以能精准匹配实际路径。


内容的提问来源于stack exchange,提问作者jonasstr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:00:02